`
runfeel
  • 浏览: 902717 次
文章分类
社区版块
存档分类
最新评论

linux文件共享

 
阅读更多

apue第三章中的文件共享

Unix系统支持在不同的进程间共享打开的文件,内核使用三种数据结构表示打开的文件。

1:每个进程在进程表中都有一个记录项,记录项中包括一张进程打开文件的描述符表。每个文件描述符对应一个打开的文件。与每个文件描述符相关联的是

a:文件描述符标志

b:指向一个文件表项的指针

2:内核为所有的打开文件维持一张文件表,每个文件表项包括:

a:文件状态标志

b:当前文件偏移量

c:指向该文件的c节点表项的指针

3:每个打开文件都有一个v字节点结构,v节点包括很多东西(不细说)

如果一个进程打开两个文件,情况就像下图一样。

图片

每个打开的文件都在进程的记录项中,记录项中有指向文件表的指针。文件表指向文件的v节点。

当一个文件被两个进程打开时。如下图

图片

每个进程都有自己的记录表,对应自己进程的文件表,文件表中有自己进程对与文件的偏移量。但是所有进程打开的同一个文件都对应同一个v节点。

当读写文件的时候,都查询自己文件表中所包含的文件偏移量。当用O_APPEND标志打开一个文件,则每次读写的时候,都将文件表项中的当前文件偏移量设置为i节点中的文件偏移量。

举个例子:当进程a打开文件,然后设置偏移量为1500(文件结尾),b再打开文件,设置偏移量为1500a再写入100这时候文件偏移量变成1600.b这时候再写的时候,扔就按照偏移量1500来写。

如果打开的时候加上O_APPEND标志就,b先设置文件偏移为1600再写入。


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics