unix环境编程 第十四章 14.3记录锁

记录锁的功能是:当地一个进程正在读或者修改文件的某个部分的时候,使用记录锁可以阻止其他进程修改同一文件区。

1.fcntl记录锁

#include <fcntl.h>
nt fcntl(int fd, int cmd, struct flock *lock);
//返回值成功依赖于cmd,失败返回-1

对于记录锁,cmd是F_GETLK,F_SETLK或者F_SETLKW。

第三个参数是一个指向flock结构的指针

struct flcok
{
    short int l_type; //锁类型:F_RDLCK,F_WRLCK,F_UNLCK
    short int l_whence; //决定l_start 位置
    off_t l_start; //锁定区域的开头位置
    off_t l_len; //锁定区域的大小
    pid_t l_pid; //锁定动作的进程
};

关于解锁和加锁区域有以下几个注意事项:

  • 指定区域起始偏移量的两个元素与lseek函数中最后两个参数类似。
  • 锁可以在当前文件尾端处开始或者越过尾端处开始,但是不能在文件起始位置之前开始。
  • 如果l_len为0,则表示锁的范围可以扩展到最大可能的偏移量。这意味着不管向该文件追加了多少写数据,它们都可以处于锁的范围内。
  • 为了对整个文件加锁,我们设置l_start和l_whence指向文件的起始位置,并且指定长度为0。

上面提到了两种类型的锁:共享读锁和独占性写锁。基本规则是,任意多个进程在一个给定的字节上可以有一把共享的读锁,但是在一个给定字节上只能有一个进程有一把独占写锁。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值