flockfile, ftrylockfile, funlockfile - 为标准输入输出锁定文件 FILE
2023-09-11 14:18:19 时间
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() 返回零,如果成功的话 (获得了锁定);如果失败就返回非零。
相关文章
- LordPE修复从进程dump出来的内存文件
- 【Linux】嵌入式开发,在Linux中使用C语言对标准I/O库文件的替换Copy
- LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
- 如何生成.mobileprovision文件
- C#读取文件而不占用文件的方法.
- android项目中values中几个文件的作用
- 第三百七十四节,Django+Xadmin打造上线标准的在线教育平台—创建课程app,在models.py文件生成4张表,课程表、课程章节表、课程视频表、课程资源表
- R语言CSV文件
- 如何使用 ABAP 把多个文件打成一个 zip包 -利用 ABAP 标准工具类 cl_abap_zip
- solr - managed-schema 文件 定义字段与类型的 先后顺序 ,错了会报错,还不知道原因
- 使用C++17 标准库处理文件系统文件
- 未能加载文件或程序集“XXX”或它的某一个依赖项。试图加载格式不正确的程序
- nohup 输出到指定文件 Linux nohup 实现命令后台运行并输出或记录到指定日志文件 设置日志结果文件名称 重定向到某个文件 标准误 标准错误输出定向
- Android多线程文件下载器
- C# 导入CSV文件,导出到CSV文件