内容概括
这一章描述的是文件I/O函数,从文件描述符开始讲起,然后介绍了一些文件io函数,然后就是介绍了文件共享的基本原理,然后介绍了控制文件描述符的一些函数,dup,dup2,fcntl等等
最后介绍了iocntl函数。。。
重点内容
本章的最重要的内容我觉得应该是文件描述符和文件共享方式了,以及不带缓冲io的概念
还有一些重要的文件描述符标志
文件描述符:
对于内核来说所有打开文件都通过文件描述符来引用,对文件的操作都可以转换为对文件描述符的操作
文件共享方式:
内核使用3中数据结构表示打开文件
1 每个进程在进程表中都有一个记录项,记录项中包括了一个文件描述符表,每个描述符占用一项文件描述符有两个成员
a.文件描述符标志即close_on_exec,此标志用来在exec另一个程序时,是否关闭文件描述符
b 一个指向文件表项的指针
2 内核为所有打开的文件维持一张文件表,每个文件表项包括:
a.文件状态标志(注意区别文件描述符标志)
b.当前文件偏移量
c.指向该文件v节点表项的指针(linux中没有v节点)
3 每一个打开文件都有一个V节点结构,描述了文件信息等等
注意:
文件表项在不同进程之间不是共享的,即每一个进程有自己的文件表项,这就造成一个文件的可能有多个文件偏移量,v节点是共享的
多个文件描述符可以指向同一个文件表项,例如dup,dup2函数,fork之后也发生同样的情况,此时父进程,子进程可以共享同一个文件表项,这也是进程间通信的基础之一
当同一个进程没有共享同一个文件表项时,而对同一个文件进行访问时,需要注意同步
文件描述符标志和文件状态标志的作用范围区别,前者只用于一个进程的一个描述符,而后者则应用于所有进程,只要该进程的文件描述符指向该文件表项
不带缓冲IO
https://www.cnblogs.com/cavehubiao/p/3981482.html
不带缓冲IO并不是指没有缓冲区,而是指,在用户态不设置缓冲区,直接调用system call
系统调用在内核中有缓冲区
数据走向 用户程序->内核缓冲区->磁盘
其他内容
剩下的都是一些要记的API了,用的时候查书或者看手册吧
open
openat
create
close
lseek
read
write
fcntl
…