属性

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

InterfaceAttributeValue
flockfile(),ftrylockfile(),funlockfile()Thread safetyMT-Safe

名称

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,它将不执行任何操作,否则它将获得所有权并增加锁计数。

出版信息

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

FLOCKFILE - Linux手册页

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

错误说明

没有。

遵循规范

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

定义_POSIX_THREAD_SAFE_FUNCTIONS时,这些功能可用。

另外参见

unlocked_stdio(3)

返回值

ftrylockfile()函数对于成功(获得锁定)返回零,对于失败返回非零。

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