flock(),lockf(),fcntl()超全整理,文件锁,C语言

发布时间:2023-01-19 10:59:27


linxu c语言 fcntl函数和flock函数区别说明
flockfcntl都有锁的功能,但他们还有一点小小的区别:
1.flock只能加全局锁,fcntl可以加全局锁也可以加局部锁。
2.当一个进程用flock给一个文件加锁时,用另一个进程再给这个文件加锁,它会阻塞或者也可以返回加锁失败(可以自己设置)
3.当一个进程用fcntl给一个文件加锁时,用另一个进程去读或写文件时必须先获取加锁的信息,然后在给这个文件加锁。
3.当给一个文件加fcntl的独占锁后,再给这个文件加flock的独占锁,其会进入阻塞状态。
4.当给一个文件加flock的独占锁后,用fcntl去获取这个锁信息获取不到,再用fcntl仍然可以给文件加锁。
/*******************************************************************/ linuxC语言中的flock函数用法 .

表头文件 #include 定义函数 int flock(int fd,int operation; 函数说明 flock(会依参数operation所指定的方式对参数fd所指的文件做各种锁定或解除锁定的动作。此函数只能锁定整个文件,无法锁定文件的某一区域。
参数 operation有下列四种情况: LOCK_SH 建立共享锁定。多个进程可同时对同一个文件作共享锁定。
LOCK_EX 建立互斥锁定。一个文件同时只有一个互斥锁定。
LOCK_UN 解除文件锁定状态。
LOCK_NB 无法建立锁定时,此操作可不被阻断,马上返回进程。通常与LOCK_SHLOCK_EX OR(|组合。
单一文件无法同时建立共享锁定和互斥锁定,而当使用dup(fork(时文件描述词不会继承此种锁定。
返回值 返回0表示成功,若有错误则返回-1,错误代码存于errno

flock(),lockf(),fcntl()超全整理,文件锁,C语言

相关推荐