linxu c 语言 fcntl 函数和flock 函数区别说明 flock 和 fcntl 都有锁的功能,但他们还有一点小小的区别: 1.flock 只能加全局锁, fcntl 可以加全局锁也可以加局部锁。 2.当一个进程用flock 给一个文件加锁时,用另一个进程再给这个文件加锁,它会阻塞或者也可以返回加锁失 败(可以自己设置)。 3.当一个进程用fcntl 给一个文件加锁时,用另一个进程去读或写文件时必 须先 获取加锁的信息,然后在给这个文件加锁。 3.当 给一个文件加fcntl 的独占锁后,再给这个文件加flock 的独占锁,其会进入阻塞状态。 4.当 给一个文件加flock 的独占锁后,用fcntl 去 获取 这个 锁信息获取不到,再用fcntl 仍然可以给文件加锁。 /*******************************************************************/ linux 下 C 语言中的flock 函数用法 . 表 头文件 #include 定 义函数 int flock(int fd,int operation); 函数说明 flock()会依参数operation 所指定的方式对参数fd 所指的文件做各种锁定或解除锁定的动作。此函数只能锁定整个文件,无法锁定文件的某一区域。 参数 operation 有下列四种情况: LOCK_SH 建立共享锁定。多个进程可同时对同一个文件作共享锁定。 LOCK_EX 建立互斥锁定。一个文件同时只有一个互斥锁定。 LOCK_UN 解除文件锁定状态。 LOCK_NB 无法建立锁定 时,此操作可不被阻断,马上返回进程。通常与LOCK_SH 或LOCK_EX 做 OR(|)组合。 单一文件无法同时建立共享锁定和互斥锁定,而当使用dup()或 fork()时文件描述词不会 继承此种锁定。 返回值 返回0 表示成功,若有错误则返回-1, 错误代 码存于errno。 flock 只要在打开文件后,需要对文件读写之前flock 一下就可以了,用完之后再flock 一下,前面加锁,后面解锁。其实确 实是 这么简单,但是前段时间用的时候 发现点 问题, 问题描述如下: 一个进程去打开文件,输入一个整数,然后上一把写锁( LOCK_ EX),再输入一个整数将解锁( LOCK_ UN),另一个进程打开同 样一个文件,直接向文件中写数据,发现锁不起作用,能正常写入(我此时用的是超级用 户)。google 了一大圈发现 flock 不提供锁检查,也就是 说在用flock 之前需要用户自己去检查一下是否已经上了锁, 说明白点就是读写文件之前用一下flock 检查一下文件有没有上锁,如果上锁了 flock 将会阻塞在那里(An ...