尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
文件描述符
一.linux 打开文件三层结构关系图文件描述符、打开文件表、inode 关系图进程文件描述符表fd_array []属于进程 PCBtask_struct私有fd 就是数组下标0/1/2 标准输入输出错误系统打开文件表struct file /file_struct全局内核共享保存读写偏移量、打开标志、引用计数inode 表inode代表磁盘上真实文件存放文件元信息其中磁盘文件属性在inode,内容在缓冲区1. 文件打开与创建通过文件名来打开文件不存在文件就会创建新的文件。文件都是具有权限的所以我们需要进行权限的定义。#include sys/types.h #include sys/stat.h #include fcntl.h // 打开已有文件 int open(const char *pathname, int flags); // 创建打开文件带权限mode int open(const char *pathname, int flags, mode_t mode);第一个参数是文件名第二个参数是文件的打开方式第三个参数是文件权限掩码。2. 文件关闭文件打开后需要及时关闭。#include unistd.h int close(int fd);参数是文件描述符一个进程的整数编号。3. 文件写入文件需要进行写入操作。#include unistd.h ssize_t write(int fd, const void *buf, size_t count);4. 文件再次写入4.1 清空写入与常规语言不一样很多是默认清空的但是这里需要手动清空要不然会出现覆盖之前的内容。第一个参数是文件描述符第二个参数是需要写入内容缓冲区的起始地址第三个参数是写入内容的大小。使用宏定义映射 O_TRUNC 选项。// 再次打开O_TRUNC 会清空之前文字重新写 int fd2 open(test.txt, O_WRONLY | O_CREAT | O_TRUNC, 0666); char buf2[] 覆盖后的新内容\n; write(fd2, buf2, strlen(buf2)); close(fd2); return 0;4.2 结尾追加写入使用宏定义映射 O_APPEND 选项。// 再次打开追加 int fd2 open(log.txt, O_WRONLY | O_CREAT | O_APPEND, 0666); write(fd2, 第二条日志\n, strlen(第二条日志\n)); close(fd2); return 0;默认写入的是字符串将整数写入会变成乱码需要写入时还是需要转化为字符串。5. 文件读取#include unistd.h ssize_t read(int fd, void *buf, size_t count);fd 参数是文件描述符一个进程的整数编号。6. 文件描述符与标准流FILE* 返回值里面封装了文件描述符 fd例如 stdin、stdout、stderr 这些对应的是 0、1、2。7. 重定向更改文件描述符的指针指向。8. 重定向原理文件描述符的分配规则最小的、没有被使用的作为新的 fd 给用户。int dup2(int oldfd, int newfd);作用让newfd指向oldfd所关联的文件fd 0 — stdin 标准输入默认键盘fd 1 — stdout 标准输出默认终端屏幕fd 2 — stderr 标准错误默认终端屏幕fd 3第一个空闲可用的文件描述符进程新建文件、socket优先分配最小空闲 fd0/1/2 被占用所以新打开文件一般拿到 3。例子:int dup2(3, 1);重定向之后可以进行close(oldfd)重定向的方式可以是清空重定向,追加重定向,同样的使用O_TRUNC,O_APPEND选项.所以重定向就是:打开文件的方式(追加,只读等)dup2(从哪里到哪里,使用文件描述符)标准输出重定向覆盖标准输出重定向追加标准输入重定向重定向一定是子进程进行重定向重定向细节当从标准输出重定向到一个指定文件log.txt时,1和2指向的标准输出和错误都是同一个显示器./out.cc log.txt //其中的1会省略,即标准输出 ./out.cc 1 log.txt //当你使用标准erro时,还是会显示到显示器上面 ./out.cc 1 log.normal 2log.erro为什么需要存在一个标准错误:可以通过重定向的能力,把常规消息和错误消息进行分离.如果我们不想将标准错误和标准输出的内容进行分开./out 1log.txt 2log.txt //使用追加重定向 ./out 1log.txt 21 //让2标准错误完全复制 1 号通道。9.引用计数基础定义引用计数内核给「文件表项」设置一个数字记录当前有多少个文件描述符指向这同一个文件表。二.理解一切皆文件我们只要拿到上层的文件描述符就可以通过struct file里面的函数指针(指向函数方法,读写等)来访问不同的硬件(键盘,磁盘等),就是c版本的多态1.缓冲区缓冲区就像一个快递站,在你忙碌的时候可以将你的包裹暂存,不至于停下手中的工作. 提高各方的效率.什么是缓冲区:内存的一段空间在c标准库中会有用户级的语言缓冲区,使用库函数(printf,fprintf.fput,fwrite)并不是直接到文件内核缓冲区,当用户(强制刷新,刷新条件满足,进程退出)的时候才会通过(fd系统调用write等)进入到内核缓冲区,fd可以找到对应文件,在满足条件的时候就可以通过fd找到对应文件写入内核缓冲区再写入到对应的硬件一个文件都要有自己的缓冲区,FILE是一个结构体,里面有fd和缓冲区指针2.缓冲的几种方式:1.立即刷新---无缓冲---写透模式WT2.缓冲区满了---全缓冲---缓冲区最满,效率最高!(普通文件)3.行刷新---行缓冲(显示器)系统调用是有成本的,所以我们通过语言缓冲区来加快效率我们只要将数据交给OS,就相当于交给了硬件!数据交给系统,交给硬件---本质全是拷贝!计算机流动的本质:一切皆拷贝
RELATED

相关推荐

C Primer Plus第6版编程练习答案PDF使用指南与C语言刷题心得

C Primer Plus第6版编程练习答案PDF使用指南与C语言刷题心得

简介:《C Primer Plus(第6版)编程练习答案》PDF文件面向正在自学C语言或配合该书学习的初学者,重点覆盖第二章和第三章部分编程练习。第二章练习演示printf输出、变量声明与算术运算、函数定义和调用流程;第三章练习涉…

📅 2026/11/8 23:08:02
西门子6SE70制动单元全解析:型号、工作原理与故障排查

西门子6SE70制动单元全解析:型号、工作原理与故障排查

简介:西门子6SE7023-2ES87-2DA1制动单元(Braking Unit)官方用户手册,配套SIMOVERT MASTERDRIVES驱动系统,适合电气工程师、驱动设备调试维护人员阅读。手册从设备定义与安全警告讲起,涵盖5~50kW与100~200kW…

📅 2026/11/3 14:51:07
Cloudflare Wallet名称预留实测:为AI Agent抢占链上可读身份

Cloudflare Wallet名称预留实测:为AI Agent抢占链上可读身份

Agent 概念持续升温之后,最先紧张起来的不是框架开发者,而是钱包生态和域名服务商。很多人还在讨论 Agent 怎么编排、怎么记忆、怎么调工具,另一批人已经开始批量预留与 Agent 相关的钱包名称。近期 Cloudflare Wallet 名称预留这一话题在开发…

📅 2026/9/20 11:30:38
MORE NEWS

更多资讯

📰

沙湾高压电工证怎么报名?工地太忙根本没时间复习考试

沙湾高压电工证怎么报名?工地太忙根本没时间复习考试 工地太忙根本没时间复习考试,这是很多电工朋友的共同烦恼。尤其是那些已经在一线工作多年、经验丰富的高压电工,面对考试复习常常感到无从下手。其实, 沙湾高压电工证…

📰

电工证挂靠社保多少钱?别再被中介坑了,这才是正规报考攻略

电工证挂靠社保多少钱?别再被中介坑了,这才是正规报考攻略 不知道去哪报名怕被中介坑,特别是电工证挂靠社保这种事,很多电工朋友一上来就被各种高价培训班、挂靠公司忽悠得晕头转向,甚至花了冤枉钱还拿不到证。现在咱们直接说重点,电工证挂靠社保多少钱…

📰

曲靖电工证考试费用及官方报名入口全解析:别让培训费打水漂

曲靖电工证考试费用及官方报名入口全解析:别让培训费打水漂 怕考不过白交培训费?现在报名电工证考试,很多人最怕的就是花了钱、花了时间,结果还是没通过。尤其是曲靖地区的电工学员,考试费用、考试内容、通过率都是绕不开的问题。如果你还在为【曲靖电工…

📰

特种工29年工龄在电子证书复审流程与实操建议

特种工29年工龄在电子证书复审流程与实操建议 证书过期了不知道怎么复审延期,你是不是也遇到过这种事?特种工29年工龄在,很多人以为工龄长就等于经验足、证书稳当,但现实是,特种作业操作证不是终身有效的, 电子证书…

📰

新野县电工证办理怎么报名 外省证能转吗

新野县电工证办理怎么报名 外省证能转吗 之前考的证在外省能不能转过来?这个问得好,很多在新野县的朋友都是拿着外地证过来咨询的。其实这个事儿,关键看你有没有“全国统一”这个关键词。 特种作业操作证…

📰

之前考的证在外省能不能转过来 电工证现在能不能考多少钱全解析

之前考的证在外省能不能转过来 电工证现在能不能考多少钱全解析 之前考的证在外省能不能转过来?很多老电工都有这样的疑问,特别是像你这样在濮阳做中小施工企业的负责人,经常需要跨省施工,证书的有效性成了刚需。现在很多人在问“ 电工证现在能不能考…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬