1、文件锁包含劝告式锁和强制式锁。
劝告式锁:要求每个使用上锁文件的进程都要检查是否有锁存在,并且尊重已有的锁。在一般情况下,内核和系统都不使用建议性锁,它们依靠程序员遵守这个规定。
强制式锁:是由内核执行的锁,当一个文件被上锁进行写入操作的时候,内核将阻止其他任何文件对其进行读写操作。采用强制性锁对性能的影响很大,每次读写操作都必须检查是否有锁存在。
2、使用文件锁的操作函数有flock()和fcntl()
flock():对整个文件。其中包含共享锁和互斥锁
fcntl():对文件区域或整个文件。其中包含读锁(共享锁)和写锁(互斥锁)
本文使用的内容全为劝告式锁。
头文件:#include <sys/file.h>
表1:
头文件:
#include <unistd.h>
#include <fcntl.h>
读锁可一直加,写锁只能有一个,其他会进入阻塞。效果同表1
写锁是互斥写。
下面的实例是文件写入锁的测试用例,文件名为,wirte_lock.c 。
这里首先创建了一个hello 文件,之后对其上写入锁,最后释放写入锁,代码如下所示
开启两个终端,并且在两个终端上同时运行该程序,以达到多个进程操作一个文件的效果。首先在终端1运行,然后在终端2上运行,注意终端二中的第一行输出。

读锁是共享读。
接下来的程序是文件读取锁的测试用例,原理和上面的程序一样。只把main函数改成一下内容。文件名为read_lock.c。

源码:https://blog.csdn.net/rl/article/details/
线程的互斥锁和条件变量
信号量(无名和有名)
待记录
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/9328.html