flockfile函数用法详解
flockfile函数简介
- 头文件包含
#include <stdio.h>
- 函数定义
void flockfile(FILE * filehandle );
int ftrylockfile(FILE * filehandle );
void funlockfile(FILE * filehandle );
flockfile函数常见使用错误
- 编译错误
warning: implicit declaration of function ‘flockfile’ [-Wimplicit-function-declaration]
解决办法:包含头文件
#include <stdio.h>
flockfile函数详细描述
stdio函数是线程安全的。这是通过为每个FILE对象分配一个lockcount和(如果lockcount为非零)一个所属线程来实现的。对于每个库调用,这些函数都要等到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 成为当前线程的所有者,并增加lockcount。
funlockfile ()函数减少锁计数。
ftrylockfile ()函数是flockfile ()的非阻塞版本,它在其他线程拥有*filehandle 的情况下不执行任何操作,否则它获得所有权并增加锁计数。
flockfile函数返回值
ftrylockfile ()函数返回零表示成功(锁已获得),非零表示失败。
flockfile函数错误码
一个都没有。
评论区