linux文件锁flock
目录
一、文件锁基本概念
Linux中软件、硬件资源都是文件(一切皆文件),文件在多用户环境中是可共享的。
文件锁是用于解决资源的共享使用的一种机制:当多个用户需要共享一个文件时,Linux通常采用的方法是给文件上锁,来避免共享的资源产生竞争的状态。
flock,建议性锁,不具备强制性。一个进程使用flock将文件锁住,另一个进程可以直接操作正在被锁的文件,修改文件中的数据,原因在于flock只是用于检测文件是否被加锁,针对文件已经被加锁,另一个进程写入数据的情况,内核不会阻止这个进程的写入操作,也就是建议性锁的内核处理策略。
flock主要三种操作类型:
LOCK_SH,共享锁,多个进程可以使用同一把锁,常被用作读共享锁;
LOCK_EX,排他锁,同时只允许一个进程使用,常被用作写锁;
LOCK_UN,释放锁;
文件锁包括建议性锁和强制性锁:
建议性锁:要求每个使用上锁文件的进程都要检查是否有锁存在,并且尊重已有的锁。在一般情况下,内核和系统都不使用建议性锁,它们依靠程序员遵守这个规定。(也有称:协同锁)
强制性锁:是由内核执行的锁,当一个文件被上锁进行写入操作的时候,内核将阻止其他任何文件对其进行读写操作。采用强制性锁对性能的影响很大,每次读写操作都必须检查是否有锁存在。
为了使能Linux中的强制锁功能。你须要在文件系统级别上打开它。同一时候在单个文件上打开它。其步骤是:
1、 挂载文件系统时使用“-o mand”參数。
2、 对于要打开强制锁功能的文件lock_file。必须打开set-group-ID位。关闭group-execute位。
(选择此方法的原因是,当你关闭group-execute时,设置set-group-ID就没有实际的意义了)