fcntl记录锁(UNIX环境高级编程笔记)

#include <fcntl.h>
int fcntl(int fd, int cmd, …/* struct flock *flockptr */);

  对于记录锁,cmd是F_GETLK、F_SETLK或F_SETLKW。第三个参数是一个指向flock结构的指针。

struct flock {
  short l_type;       / * Type of lock: F_RDLCK, F_WRLCK, F_UNLCK * /
  short l_whence;    / * How to interpret l_start: SEEK_SET, SEEK_CUR, SEEK_END * /
  off_t l_start;     / * Starting offset for lock * /
  off_t l_len;       / * Number of bytes to lock * /
  pid_t l_pid;      / * PID of process blocking our lock(set by F_GETLK and F_OFD_GETLK) * /
};

  对flock结构说明如下。
  ● 所希望的锁类型:F_RDLCK(共享读锁)、F_WRLCK(独占性写锁)或F_UNLCK(解锁一个区域)。
  ● 要加锁或解锁的区域的其实字节偏移量(l_start和l_whence)。
  ● 区域的字节长度(l_len)。
  ● 进程ID(l_pid)持有的锁能阻塞当前进程(仅由F_GETLK返回)。

锁的隐含继承和释放

  关于记录锁的自动继承和释放有3条规则。
  (1)锁与进程和文件两者相关联。当一个进程终止时,它所建立的锁全部释放;无论一个文件描述符何时关闭,该进程通过这一描述符引用的文件上的任何一把锁都会释放。
  (2)有fork产生的子进程不会继承父进程所设置的锁。
  (3)在执行exec后,新程序可以继承原执行程序的锁。如果一个文件描述符被设置成执行时关闭,那么exec执行后,进程通过该文件描述符引用的文件上的所有锁都会被释放。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值