Linux-task_struct和文件系统及管道的关系
fs_struct 记录该进程所在文件系统等信息。
files_struct 记录该进程当前打开的所有文件等信息,其中有一个元素为数组,数组索引是文件描述符,数组元素(FILE *类型)指向了 file 对象。由此可知两个文件描述符可以指向同一 file 对象,即使不在同一进程。
file 为 FILE 对象,可以在 include/linux/fs.h 中查看。
结合以上知识来图
进程与管道的接口和进程与文件的接口是一致的。不同的是,在实现上,内核将读写的偏移量放在索引节点中而不是文件表中。
创建无名管道函数 pipe 一次调用返回两个文件描述符,并且内核也会从文件表中找到两个空闲表项及一个内存 inode 索引节点,文件描述符和文件表一一对应,而两个文件表则对应同一个 inode,执行一个文件表的权限为读,一个文件表的权限为写。inode 的引用数设置为 2。管道存储数据的缓冲区会由内核从内存中分配出一页大小的内存来作为管道实现数据的读与写。