Linux下的文件锁

来源:互联网 发布:婚前同居 知乎 编辑:程序博客网 时间:2024/06/05 09:07

文件锁是计算机文件程序机制,强制访问计算机文件只能由一个用户或在任何特定时间的过程。

目的是:防止恶意的更新场景

利用这种机制能够使读写单个文件的过程变得更安全。

Linux下的两种常见的文件锁:

1、协同锁:

   协同锁要求参与操作的进程之间协同合作。例如进程A获得一个WRITE锁,并开始向文件中写入内容;但如果没有试图获取锁的进程B,也可以打开文件并向文件中写入内容。进程B就是一个非合作进程,但如果进程B试图获取一个锁,那么该过程就是一个合作的过程,从而可以保证操作的“序列化”。所以只有当参与操作的进程是协同合作的时候,协同锁才能发挥作用,所以亦称为“非强制”锁。


2、强制锁:

   强制锁不需要参与操作的进程之间保持协同合作,利用内核查检每个打开、读取、写入操作,从而保证在调用这些操作时不违反文件上的锁规则。

   大多的操作系统都支持文件锁,即在任何给定的文件的个人记录都可能会被锁定。数据库维护中的文件锁定,可以序列化到整个底层数据库的物理文件的访问。虽然可以防止任何其他进程访问文件,但它可以被删除,每个锁的实现和释放开销比单独锁定一个文件中的地区大量更有效率。

flock()

    头文件:#include <sys/file.h>

    功能:锁定文件或解除锁定

    原型:int flock(int fd,operation)

    说明:依照参数operation所指定的方式对参数fd所指的文件做各种锁定或解除锁定的动作。而这个函数只能锁定整个文件,不能锁定文件的某一区域。

  operation的四种情况:

  1、LOCK_SH:建立共享锁定。多个进程可同时对同一个文件作共享锁定;

  2、LOCK_EX:建立互斥锁定。一个文件同时只有一个互斥锁定;

  3、LOCK_UN:解除文件锁定状态。

  4、LOCK_NB:无法建立锁定时,吃操作可不被阻断,马上返回进程。通常与LOCK_SH或LOCK_EX做OR(|)组合。组合

    返回值:成功,返回0;有错误则返回-1,并将错误存放在errno中。

0 0
原创粉丝点击