分享
 
 
 

lockf

王朝百科·作者佚名  2010-08-15
窄屏简体版  字體: |||超大  

lockf 文件锁lockf()函数允许将文件区域用作信号量(监视锁),或用于控制对锁定进程的访问(强制模式记录锁定)。试图访问已锁定资源的其他进程将返回错误或进入休眠状态,直到资源解除锁定为止。当关闭文件时,将释放进程的所有锁定,即使进程仍然有打开的文件。当进程终止时,将释放进程保留的所有锁定。函数声明:/* 'lockf' is a simpler interface to the locking facilities of 'fcntl'. LEN is always relative to the current file position. The CMD argument is one of the following. This function is a cancellation point and therefore not marked with __THROW. */

#include <unistd.h>

int lockf(int fd, int cmd, off_t len);

①fd 是打开文件的文件描述符。

为通过此函数调用建立锁定,文件描述符必须使用只写权限(O_WRONLY)或读写权限(O_RDWR)打开。如果调用进程是具有PRIV_LOCKRDONLY 权限的组的成员,它也可以使用lockf()来锁定使用只读权限(O_RDONLY)打开的文件。

②cmd 是指定要采取的操作的控制值,允许的值在中定义。

如下所示:

# define F_ULOCK 0 //解锁

# define F_LOCK 1 //互斥锁定区域

# define F_TLOCK 2 //测试互斥锁定区域

# define F_TEST 3 //测试区域

F_TEST 用于检测在指定的区域中是否存在其他进程的锁定。如果该区域可访问,lockf()将返回 0,否则返回−1;在这种情况下,errno 设置为[EACCES]。F_LOCK 和 F_TLOCK 都用于锁定文件的某个区域(如果该区域可用)。F_ULOCK 用于删除文件区域的锁定。

使用 F_LOCK 或 F_TLOCK 锁定的区域可以完全或部分包含同一个进程以前锁定的区域,或被同一个进程以前锁定的区域包含。此时,这些区域将会合并为一个区域。如果请求要求将新元素添加到活动锁定表中,但该表已满,则会返回一个错误,并且不会锁定新区域。

F_LOCK 和 F_TLOCK 请求仅在采取的操作上有所差异(如果资源不可用)。如果区域已被其他进程锁定,F_LOCK 将使调用进程进入休眠状态,直到该资源可用,而 F_TLOCK 则会返回[EACCES]错误。

F_ULOCK 请求可以完全或部分释放由进程控制的一个或多个锁定区域。如果区域未完全释放,剩余的区域仍将被进程锁定。如果该表已满,将会返回[EDEADLK]错误,并且不会释放请求的区域。

③len是要锁定或解锁的连续字节数。

要锁定的资源从文件中当前偏移量开始,对于正 len 将向前扩展,对于负 len 则向后扩展(直到但不包括当前偏移量的前面的字节数)。如果 len 为零,则锁定从当前偏移量到文件结尾的区域(即从当前偏移量到现有或任何将来的文件结束标志)。要锁定一个区域,不需要将该区域分配到文件中,因为这样的锁定可以在文件结束标志之后存在。

使用 S_ENFMT 文件模式的常规文件(未设置组执行位)将启用强制策略。启用强制策略后,如果清除了 O_NDELAY,访问锁定区域的读取和写入将进入休眠状态,直到整个区域可用为止,但是如果设置了O_NDELAY,将会返回−1并设置 errno。由其他系统函数(如 exec())访问的文件不受强制策略的影响。返回值:此函数调用成功后,将返回值 0;否则返回−1,并且设置 errno 以表示该错误。 由于当文件的某部分被其他进程锁定后,变量 errno 将会设置为[EAGAIN]而不是[EACCES],因此可移植应用程序应对这两个值进行预计和测试。例如:

if (lockf(fd, F_TLOCK, siz) == -1) //测试锁定

if ((errno == EAGAIN) || (errno == EACCES))

…….

else if ...

/* check for other errors*/

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有