系统I/O——共享文件的理解

共享文件

已打开文件的描述:
 内核使用三个相关数据来描述已经打开的文件。分别是:
 1..描述符表:每个进程都有独立的描述符表。他的表项是由进程打开的文件描述符索引的,每个打开的文件描述符指向文件表当中的一项。
2..文件表:打开的文件集合是由一张文件表来表示的所有的进程共享这张表。每个文件表的表项的组成:当前文件的位置,引用计数,一个指向v-node表中对应表项的指针。关闭一个描述符会减少相应文件表表项当中的引用计数,直到这个引用计数为0内核才会删除这个表项。
3.v-node表:所有的进程共享这张表。每个表项包含stat结构当中的大多数信息 包括st_size:包含文件的字节数的大小,st_mode编码了文件访问许可和文件类型。

下面举一个例子:

在这里插入图片描述
在这里插入图片描述理解说明:父进程中fork返回子进程的pid(非零),子进程中fork返回0.在调用子进程之前,父进程已经从 abcde.txt 读了一个字符 即c1=a。sleep函数可以将一个进程挂起一段指定的时间,若为sleep(1),该进程后执行;sleep(0)不影响进程执行,当父进程ID为偶数时,父进程中是sleep(0),子进程中是sleep(1)。因此父进程先执行,此时读c2,当前光标在a后面,所有读下一个字符 即c2=b;接下来执行子进程,因为这是父子进程共享文件位置,所以读子进程c2时,光标是在b后面的,因此c2=c (如第一次运行结果所示)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值