tlpi: 文件锁(flock(), fcntl())

文件锁

文件锁是一种专为文件I/O设计的一种同步技术,当多个进程在无同步下对文件进行I/O操作时,可能会导致竞争的出现
在这里插入图片描述

文件锁的使用步骤通常如下

  1. 给文件加锁
  2. 执行文件I/O
  3. 解锁文件使得其他进程能够给文件加锁

stdio缓冲与加锁

在使用文件锁时需要注意stdio缓冲区的问题

在给文件加锁之前,缓冲区中可能包含我们不希望拥有的值,当在释放锁之后,缓冲区中内容的也可能会被无意写入文件,对此有以下几种办法

  1. 使用read(),write())系统调用替代stdio()函数
  2. 对文件加锁后,释放前都立即刷新stdio缓冲区
  3. 使用setbuf(NULL)禁用缓冲
1.使用flock()给文件加锁
#include<sys/file.h>
int flock(int fd, int operation);
								//成功: 返回0    失败:返回-1

参数解释

  • fd

    指定加锁的文件的文件描述符

  • operation

    operation可以有如下取值,支持OR

    描述
    LOCK_SH 在fd引用的文件上放置一把共享锁
    LOCK_EX 在fd引用的文件上放置一把互斥锁
    LOCK_UN 解锁fd引用的文件
    LOCK_NB 发起一个非阻塞锁请求

互斥锁与共享锁

在任一时刻,任意数量的进程可同时持有一个文件上的共享锁,但在同一时刻,只能有一个进程持有同一个文件上的互斥锁,如表

在这里插入图片描述

锁粒度

flock()会在整个文件上加锁,即它的加锁粒度是整个文件

<

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值