文件的原子操作

每个进程的维护Linux下时task_struct ,其中有一个记录项,

记录项是一个文件指针,指向一个文件描述符表,文件描述表相关联的是文件文件描述符标志和指向文件表项的指针

内核为所有打开的文件维护一张文件表项,与之相关连的是文件状态标志,当前文件偏移量,指向该文件v节点的指针

每个打开的文件都有一个v节点结构,v节点包含了文件类型对文件进行各种操作的函数,例如open,write等等,i 节点,当前文件长度

在这里插入图片描述
每个进程都有自己的文件表项的理由是:这种安排使得每个进程都有它对该文件的当前偏移量

这里有一个问题,如果两个进程,打开了同一个文件,那么他们的结构是怎样的呢?
在这里插入图片描述

这会有什么结果呢?
试想一下,一对父子进程同时打开了一个文件,文件的结构就是图上所示,假设父进程此时打开文件,在设置文件偏移量为1500,子进程现在切换,lseek设置文件偏移量为1500,然后进行write,到1600,若此时进程切换,又回到父进程,此时是1500,这时,父子进程操作文件就出来现问题。
linux系统是如何解决的呢?
答案就是在每次进程调用打开文件时,设置O_APPEND标志,每次对文件进行写时,都将调用sleek,将文件偏移量设置为文件结尾处。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值