系统调用open()为什么有O_APPEND,O_CREAT选项

 

要将内容写到文件的尾端

如果open函数没有使用O_APPEND选项,则要分两步

1.lseek定位到文件的尾端

2.写内容

单进程写文件时是没有问题的,若是两个进程同时执行此操作,可能出现

都定位到文件的尾端,进程a写了内容后,进程b再写,则b会覆盖掉a所写的内容。

而O_APPEND选项则把上述两步合成一个原子操作,即不会出现问题,确保写的内容都是在文件尾端。

 

要判断文件是否存在,不存在则创建该文件

1.打开文件,如果失败,则表示文件不存在。

2.创建文件

如果两个进程都执行上述操作,则在进程a准备创建文件时,进程b已经创建文件,并写了内容。

则进程a再创建文件时会把进程b所写的内容清空掉。

而O_CREAT则把上述操作合并成原子操作,即不会出现问题。确保文件不存在则创建新文件。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值