LOCKFILE(3)

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 版本中

CONFORMING TO 标准参考
POSIX.1

SEE ALSO 参见
unlocked_stdio(3)