本文主要是介绍linux C语言实现文件锁之flock,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一:flock函数特点:
1.flock只能加全局锁。
2.当一个进程用flock给一个文件加锁时,用另一个进程再给这个文件加锁,它会阻塞或者也可以返回加锁失败(可以自己设置)。
3.当给一个文件加fcntl的独占锁后,再给这个文件加flock的独占锁,其会进入阻塞状态。
4.当给一个文件加flock的独占锁后,用fcntl去获取这个锁信息获取不到,再用fcntl仍然可以给文件加锁。
5.用flock之前需要用户自己去检查一下是否已经上了锁,在进行操作,否则直接写入文件,锁为不起作用。
二:遇到的问题:
一个进程去打开文件,输入一个整数,然后上一把写锁(LOCK_EX),再输入一个整数将解锁(LOCK_UN),
另一个进程打开同样一个文件,直接向文件中写数据,发现锁不起作用,能正常写入(我此时用的是超级用户)。
解决问题,发现flock不提供锁检查,也就是说在用flock之前需要用户自己去检查一下是否已经上了锁,
说明白点就是读写文件之前用一下flock检查一下文件有没有上锁,如果上锁了flock将会阻塞在那里
(An attempt to lock the file using one of these file descriptors may be denied by a lock
that the calling process has already placed via another descriptor ).
三:函数详解
这篇关于linux C语言实现文件锁之flock的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!