【Linux】重定向
1、理解重定向在task_struct结构体中存放files_struct*指针指向本进程的文件描述符表fd_array文件描述符的分配规则是从下标0开始找值最小并且没有被使用的位置正常程序默认打开0、1、2这三个位置全部被占用默认起始下标为3如果先执行close(2)那么起始下标就为2#includestdio.h#includesys/types.h#includesys/stat.h#includefcntl.h#includeunistd.h#includestring.hintmain(){close(2);intfdaopen(log.txt,O_WRONLY|O_CREAT|O_TRUNC,0666);printf(fda: %d\n,fda);intfdbopen(log.txt,O_WRONLY|O_CREAT|O_TRUNC,0666);printf(fdb: %d\n,fdb);intfdcopen(log.txt,O_WRONLY|O_CREAT|O_TRUNC,0666);printf(fdc: %d\n,fdc);return0;}1为显示器输出如果把1号下标对应的文件关闭那么将产生输出重定向#includestdio.h#includesys/types.h#includesys/stat.h#includefcntl.h#includeunistd.h#includestring.hintmain(){close(1);intfdaopen(log.txt,O_WRONLY|O_CREAT|O_TRUNC,0666);printf(fda: %d\n,fda);intfdbopen(log.txt,O_WRONLY|O_CREAT|O_TRUNC,0666);printf(fdb: %d\n,fdb);intfdcopen(log.txt,O_WRONLY|O_CREAT|O_TRUNC,0666);printf(fdc: %d\n,fdc);return0;}当运行operfile程序时无输出内容全部写入了log.txt中完成输出重定向文件描述符1这个编号从绑定屏幕改成了绑定log.txtfd[1]中存储的内容指向了log.txt的内容并且操作系统更改1的指向后语言层并不知道stdout封装1后语言层只认数字1所以重定向的本质是更改数组特定下标内的内容2、dup2dup2为系统调用的重定向函数函数定义intdup2(intoldfd,intnewfd);将newfd变成oldfd的副本如果newfd原本打开了资源会先自动关闭newfddup2实现重定向的方式不是先关闭文件描述符再打开一个文件而是将oldfd下标里存储的文件拷贝到newfd中#includestdio.h#includesys/types.h#includesys/stat.h#includefcntl.h#includeunistd.h#includestring.hintmain(){// close(1); 注释掉不手动关闭标准输出fd1intfdaopen(log.txt,O_WRONLY|O_CREAT|O_TRUNC,0666);printf(fda: %d\n,fda);// 输出 3dup2(fda,1);// fd1现在指向log.txt内容写入文件printf(aaaaaa);printf(aaaaaa);printf(aaaaaa);fprintf(stdout,aaaaaa\n);return0;}dup2让fd1复制fda指向的文件实现标准输出重定向把O_TRUNC替换成O_APPEND可以实现追加重定向3、输入重定向使用cat命令时cat会从键盘读取数据但输入重定向后会从log.txt中读取内容#includestdio.h#includesys/types.h#includesys/stat.h#includefcntl.h#includeunistd.h#includestring.hintmain(){intfdopen(log.txt,O_RDONLY);printf(fd: %d\n,fd);dup2(fd,0);// 从标准输入读取数据charbuf[64];fgets(buf,sizeof(buf),stdin);printf(读取到文件内容%s,buf);close(fd);return0;}dup2(fd, 0);把打开的文件fd覆盖掉0号文件描述符之后所有读 stdin 的操作不再读键盘而是读log.txt这就是程序内部实现输入重定向4、理解一切皆文件键盘、显示器、网卡、硬盘等硬件底层读写逻辑完全不相同为什么上层可以统一用同一个接口每次打开一个文件或设备时内核都会创建一个独立的struct file对象内部有函数指针数组操作系统向上层应用提供统一的IO接口通过内核struct file 驱动函数指针把磁盘文件、键盘、显示器、网卡、管道、套接字全部抽象成文件统一管理。所以应用层调用open或write等函数时会通过fd下标找到进程文件描述符表拿到struct file*自动跳转到底层硬件驱动专属方法上层应用完全不用区分硬件类型接口是统一的

相关新闻

病理报告文书太耗时、又不敢让AI碰诊断怎么办?UPMC把智能体锁死在文书层:94例活检结构识别100%、零幻觉诊断,出报告从76秒压到39秒

病理报告文书太耗时、又不敢让AI碰诊断怎么办?UPMC把智能体锁死在文书层:94例活检结构识别100%、零幻觉诊断,出报告从76秒压到39秒

一、研究背景 关于医疗 AI 智能体,过去一年出现了大量令人兴奋的论文:能自主问诊的、能推理罕见病的、能模拟移植委员会的。但把这些成果放到医院信息科的视角下看,会发现一个共同的尴尬——它们几乎都跑在实验环境里。 论文里的智能体&#…

2026/8/11 7:34:39 阅读更多 →
Unity中实现逼真水浮力效果:从物理原理到性能优化实战

Unity中实现逼真水浮力效果:从物理原理到性能优化实战

1. 项目概述:为什么“水浮力”是Unity开发中的硬骨头?在Unity里做水,很多开发者都卡在“浮力”这个环节。你可能会觉得,不就是让物体在水里漂起来吗?加个向上的力不就行了?但实际动手你会发现,事…

2026/8/11 7:34:39 阅读更多 →
2026年想给无锡学生选专业课桌椅?哪家机构靠谱看这里!

2026年想给无锡学生选专业课桌椅?哪家机构靠谱看这里!

在为无锡的学生挑选专业课桌椅时,选择一家靠谱的机构至关重要。合适的桌椅不仅能提升学生的学习体验和效率,还对学生的身体健康有着积极的影响。今天就来给大家推荐一家值得考虑的机构——无锡唯好办公,同时分享一些挑选专业课桌椅的要点。一…

2026/8/11 7:33:39 阅读更多 →

最新新闻

C++异常处理机制:原理、实现与最佳实践

C++异常处理机制:原理、实现与最佳实践

1. 异常机制的本质与设计哲学 C异常处理机制本质上是一种非本地控制流转移机制,它允许程序在检测到错误条件时,将控制权从当前执行点转移到能够处理该错误的代码块。这种机制与传统的错误码返回方式有着根本性的区别: 控制流反转 &#xff…

2026/8/11 9:24:19 阅读更多 →
上海嵌入式开发行业现状与职业发展分析

上海嵌入式开发行业现状与职业发展分析

1. 嵌入式开发行业现状与上海市场特点 在上海从事嵌入式开发工作近十年,我见证了这座城市从传统制造业向智能硬件、物联网领域的快速转型。作为国内集成电路产业重镇,上海拥有从芯片设计到终端应用的完整产业链,这为嵌入式开发者提供了得天独…

2026/8/11 9:24:19 阅读更多 →
面向学术研究场景的论文智能问答系统构建与应用实践

面向学术研究场景的论文智能问答系统构建与应用实践

2026届硕博新生,时间就是科研命脉:文献梳理要花一周、初稿润色又一周、改稿循环无休止……真正高效的人早已用AI重塑工作流——先精准抓信息、再智能搭逻辑、最后快速迭代,产出速度和质量双提升。 这4款工具不是简单“聊天机器人”&#xff…

2026/8/11 9:24:19 阅读更多 →
纯 HTML/CSS/JS 实现项目报价器:工期、风险缓冲和报价区间设计

纯 HTML/CSS/JS 实现项目报价器:工期、风险缓冲和报价区间设计

很多开发者第一次接外包时,会详细评估技术方案,却在报价环节给出一个“感觉差不多”的整数。 真正危险的不只是价格偏低,而是报价里没有包含沟通、测试、联调、修改和交付风险。 本文使用纯 HTML、CSS 和 JavaScript 实现一个项目报价器。项…

2026/8/11 9:24:19 阅读更多 →
【单片机课设毕设项目】单片机为核心的水环境实时数据可视化预警设备开发 基于 51/STM32 单片机的多按键操控水质监测控制系统(018102)

【单片机课设毕设项目】单片机为核心的水环境实时数据可视化预警设备开发 基于 51/STM32 单片机的多按键操控水质监测控制系统(018102)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/8/11 9:24:19 阅读更多 →
蓝桥杯竞赛环境搭建全攻略:从零配置到全真模拟

蓝桥杯竞赛环境搭建全攻略:从零配置到全真模拟

很多同学在准备蓝桥杯这类编程竞赛时,投入了大量时间刷题、研究算法,却往往忽略了一个最基础、也最致命的问题——开发环境。直到走进考场,打开电脑,面对一个陌生的IDE、一个不兼容的编译器版本,或者一个从未配置过的单…

2026/8/11 9:23:19 阅读更多 →

日新闻

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南 【免费下载链接】video2x A machine learning-based video super resolution and frame interpolation framework. Est. Hack the Valley II, 2018. 项目地址: https://gitcode.com/GitHub_Trending/vi/v…

2026/8/11 0:00:02 阅读更多 →
前后端分离项目中控制台与接口工具数据差异排查指南

前后端分离项目中控制台与接口工具数据差异排查指南

1. 问题现象解析:控制台与Apifox的数据差异 最近在调试一个前后端分离项目时,遇到了一个典型问题:后端服务在本地开发环境控制台能正常输出查询数据,但通过Apifox测试时却返回空结果。这种"控制台有数据,接口工具…

2026/8/11 0:00:03 阅读更多 →
AI编程实战:从Claude Code踩坑到游戏开发入门

AI编程实战:从Claude Code踩坑到游戏开发入门

1. 从“AI能帮我做游戏”到“AI让我重新学编程”最近身边不少朋友,尤其是一些非技术背景、但对游戏开发有浓厚兴趣的朋友,都在问我同一个问题:“听说现在用Claude Code这种AI编程工具,小白也能做游戏了,是真的吗&#…

2026/8/11 0:00:03 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/11 1:08:05 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/11 1:08:05 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/11 1:08:05 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/10 17:07:33 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/11 1:08:06 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/10 17:07:33 阅读更多 →