FLOCKFILE - Linux手册页
Linux程序员手册 第3部分
更新日期: 2020-06-09
名称
flockfile,ftrylockfile,funlockfile-锁定stdio的文件
语法
#include <stdio.h> void flockfile(FILE *filehandle); int ftrylockfile(FILE *filehandle); void funlockfile(FILE *filehandle);
glibc的功能测试宏要求(请参阅feature_test_macros(7)):
上面显示的所有功能:
- / *自glibc 2.24起:* / _POSIX_C_SOURCE>= 199309L || / * Glibc版本
说明
stdio函数是线程安全的。这是通过为每个FILE对象分配一个锁计数和一个拥有线程(如果锁计数为非零)来实现的。对于每个库调用,这些函数将等待直到FILE对象不再被其他线程锁定,然后将其锁定,执行请求的I / O并再次解锁该对象。
(注意:此锁定与flock(2)和lockf(3)之类的函数完成的文件锁定无关。)
所有这些对于C程序员都是不可见的,但是可能有两个原因希望获得更详细的控制。一方面,一个线程可能执行的一系列I / O操作属于同一类,并且不应被其他线程的I / O中断。另一方面,也许应该避免锁定开销以提高效率。
为此,线程可以显式锁定FILE对象,然后执行其一系列I / O操作,然后解锁。这样可以防止其他线程介于两者之间。如果这样做的原因是为了提高效率,则可以使用非锁定版本的stdio函数执行I / O:使用getc_unlocked(3)和putc_unlocked(3)代替getc(3)和putc(3)。
flockfile()函数等待* filehandle不再被另一个线程锁定,然后使* filehandle成为当前线程的所有者,并增加锁计数。
funlockfile()函数减少锁计数。
ftrylockfile()函数是flockfile()的非阻塞版本。万一其他线程拥有* filehandle,它将不执行任何操作,否则它将获得所有权并增加锁计数。
返回值
ftrylockfile()函数对于成功(获得锁定)返回零,对于失败返回非零。
错误说明
没有。
属性
有关本节中使用的术语的说明,请参见attribute(7)。
Interface | Attribute | Value |
flockfile(),ftrylockfile(),funlockfile() | Thread safety | MT-Safe |
遵循规范
POSIX.1-2001,POSIX.1-2008。
定义_POSIX_THREAD_SAFE_FUNCTIONS时,这些功能可用。
另外参见
出版信息
这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/。