LOCKF - Linux手册页
Linux程序员手册 第3部分
更新日期: 2019-03-06
名称
lockf-在打开的文件上应用,测试或删除POSIX锁
语法
#包括
int lockf(int fd,int cmd,off_t len);
glibc的功能测试宏要求(请参阅feature_test_macros(7)):
lockf():
- _XOPEN_SOURCE>= 500 || / * Glibc自2.19起:* / -_DEFAULT_SOURCE || / * Glibc版本
说明
在打开的文件的一部分上应用,测试或删除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)。
返回值
成功时,返回零。如果出错,则返回-1,并正确设置errno。
错误说明
- EACCESor EAGAIN
- 该文件被锁定并指定了F_TLOCK或F_TEST,或者由于该文件已被另一个进程进行内存映射,因此禁止该操作。
- EBADF
- fd不是打开文件描述符;或cmd是F_LOCK或F_TLOCK,而fd不是可写文件描述符。
- EDEADLK
- 命令为F_LOCK,此锁定操作将导致死锁。
- EINTR
- 在等待获取锁的过程中,调用被处理程序捕获的信号传递中断;参见signal(7)。
- EINVAL
- 在cmd中指定了无效的操作。
- ENOLCK
- 段锁打开过多,锁表已满。
属性
有关本节中使用的术语的说明,请参见attribute(7)。
Interface | Attribute | Value |
lockf() | Thread safety | MT-Safe |
遵循规范
POSIX.1-2001,POSIX.1-2008,SVr4。
另外参见
Linux内核源目录Documentation / filesystems中的locks.txt和composite-locking.txt(在较早的内核上,这些文件直接位于Documentation目录下,而commended-locking.txt被称为community.txt)
出版信息
这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/。