语法

#包括

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

glibc的功能测试宏要求(请参阅feature_test_macros(7)):

lockf():

_XOPEN_SOURCE>= 500 || / * Glibc自2.19起:* / -_DEFAULT_SOURCE || / * Glibc版本

错误说明

EACCESor EAGAIN
该文件被锁定并指定了F_TLOCK或F_TEST,或者由于该文件已被另一个进程进行内存映射,因此禁止该操作。
EBADF
fd不是打开文件描述符;或cmd是F_LOCK或F_TLOCK,而fd不是可写文件描述符。
EDEADLK
命令为F_LOCK,此锁定操作将导致死锁。
EINTR
在等待获取锁的过程中,调用被处理程序捕获的信号传递中断;参见signal(7)。
EINVAL
在cmd中指定了无效的操作。
ENOLCK
段锁打开过多,锁表已满。

另外参见

fcntl(2),flock(2)

Linux内核源目录Documentation / filesystems中的locks.txt和composite-locking.txt(在较早的内核上,这些文件直接位于Documentation目录下,而commended-locking.txt被称为community.txt)

名称

lockf-在打开的文件上应用,测试或删除POSIX锁

返回值

成功时,返回零。如果出错,则返回-1,并正确设置errno。

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/

遵循规范

POSIX.1-2001,POSIX.1-2008,SVr4。

说明

在打开的文件的一部分上应用,测试或删除POSIX锁。该文件由fd指定,文件描述符可打开以供写入,cmd指定操作,并且该节由字节位置pos..pos + len-1(如果len为正)和pos-len..pos-1(如果len)组成为负,其中pos是当前文件位置,如果len为零,则该部分从当前文件位置延伸到无穷大,包括当前和将来的文件结束位置。在所有情况下,该节都可能会扩展到当前文件末尾。

在Linux上,lockf()只是fcntl(2)锁定之上的接口。许多其他系统也以这种方式实现lockf(),但请注意,POSIX.1并未指定lockf()和fcntl(2)锁之间的关系。便携式应用程序可能应该避免混合使用这些接口。

有效操作如下:

F_LOCK
在文件的指定部分上设置排他锁。如果此部分(的一部分)已被锁定,则调用将阻塞,直到释放先前的锁定为止。如果此部分与先前锁定的部分重叠,则两者将合并。一旦持有锁的进程关闭文件的某些文件描述符,就会释放文件锁。子进程不会继承这些锁。
F_TLOCK
与F_LOCK相同,但是如果文件已被锁定,则调用永远不会阻塞并返回错误。
F_ULOCK
解锁文件的指示部分。这可能导致锁定部分被分成两个锁定部分。
F_TEST
测试锁:如果指定的部分已被此过程解锁或锁定,则返回0;否则返回0。返回-1,如果另一个进程持有锁,则将errno设置为EAGAIN(在某些其他系统上为EACCES)。

属性

有关本节中使用的术语的说明,请参见attribute(7)。

InterfaceAttributeValue
lockf()Thread safetyMT-Safe
LOCKF - Linux手册页

Linux程序员手册 第3部分
更新日期: 2019-03-06

日期:2019-08-20 18:00:47 来源:oir作者:oir