NAME¶
flockfile, ftrylockfile, funlockfile -
为标准输入输出锁定文件
FILE
SYNOPSIS 总览¶
#include <stdio.h>
void flockfile(FILE *filehandle);
int ftrylockfile(FILE *filehandle);
void funlockfile(FILE *filehandle);
DESCRIPTION 描述¶
标准输入输出库 stdio
函数是线程安全的。这是通过为每个文件对象
FILE 赋予一个锁定计数和
(当锁定计数非零时)
一个所有者线程来实现的。对每个库函数调用,这些函数等待直到文件对象
FILE
不再被一个不同的线程锁定,然后锁定它,进行所需的
I/O
操作,再次对它解锁。
(注意:这个锁定与由函数
flock(2) 和
lockf(3)
实现的锁定无关。)
所有这些操作对 C
程序员来说都是不可见的,但是有两种理由,需要进行更加细节的控制。其一,也许某个线程需要进行不可分割的一系列
I/O
操作,不应当被其他线程的
I/O
所终端。其二,出于效率因素,应当避免进行过多的锁定来提高效率。
为此,一个线程可以显式地锁定文件对象
FILE,接着进行它的一系列
I/O
操作,然后解锁。这样可以避免其他线程干扰。如果这样做的原因是需要达到更高的效率,应当使用
stdio
函数的非锁定版本来进行
I/O 操作:使用
getc_unlocked() 和
putc_unlocked() 来代替
getc() 和
putc()。
函数
flockfile() 等待 *
filehandle
不再被其他的线程锁定,然后使当前线程成为
*
filehandle
的所有者,然后增加锁定计数
lockcount。
函数
funlockfile()
减少锁定计数。
函数
ftrylockfile() 是
flockfile()
的非锁定版本。它在其他线程拥有
*
filehandle
时不做任何处理,否则取得所有权并增加锁定计数。
RETURN VALUE 返回值¶
函数
ftrylockfile()
返回零,如果成功的话
(获得了锁定);如果失败就返回非零。
ERRORS¶
无。
AVAILABILITY¶
这些函数当定义了
_POSIX_THREAD_SAFE_FUNCTIONS
时可用。它们存在于 libc
5.1.1 之后的 libc
版本中,以及 glibc 2.0
之后的 glibc 版本中
POSIX.1
SEE ALSO 参见¶
unlocked_stdio(3)