Linux文件锁技术的分析与实现.pdf
第 22卷 第 4期 电脑 开 发 与 应 用
文章编号 :1003—5850(2009)04—0043—03
Linux文 件 锁 技 术 的 分 析 与 实 现
AnalysisandRealization ofFileLock inLinux
周 超 刘云朋。
(焦作大学信息工程学院 河南焦作 454003)(。焦作大学科研处 河南焦作 454003)
【摘 要】为 了解决多个进程并发访 问同一个文件时所面临的同步 问题,Linux采用 了文件加锁技术。介绍了
Linux中各类文件锁的概念 ,详细分析 了与文件锁密切相关的系统调用 ,并给 出了一个文件锁的使用实例 。
【关键词】Linux,系统调用,锁,文件
中图分类号 :TP301 文献标识码 :A
ABSTRACT Inordertosolvethesynchronizationofmanyprocessaccessingthesamefile,Linuxhasadoptedfilelock.Thispaper
describestheconceptoffile1ockinLinux'analysasthecloselyrelatedsystem calls’andoffersanexampleoffilelock·
.
KEYWORDS Linux。system call,lock,file
在多任务操作系统环境 中,如果一个进程尝试对 文件加共享锁。但是 ,如果一个进程对该文件加了排他
正在被其他进程读取的文件进行写操作 ,可能会导致 锁,那么其他进程则无权再对该文件加共享锁或者排
正在进行读操作的进程读取到一些被破坏或者不完整 他锁 ,直到该排他锁被释放。
的数据 ;如果两个进程并发对同一个文件进行写操作 ,
2 相关的系统调用
可能会导致该文件遭到破坏。因此 ,为了避免发生这种
问题,必须要采用某种机制来解决多个进程并发访 问 在 Linux中,有两个与文件锁关系密切的系统调
同一个文件时所面临的同步问题,由此而产生了文件 用 :flock()和 fentl()。
加锁方面的技术。 ① flock()
Linux2.6内核利用系统调用 flock()实现 了共
1 Linux支持的文件锁技术
享模式强制锁 ,但 flock()只能实现对整个文件进行
Linux支持的文件锁技术主要包括劝告锁和强制 加锁 ,不能实现记录级 的加锁 ,函数原型如下 :
锁这两种。劝告锁是一种协同工作的锁 ,对于这一种锁 intflock(intfd,intoperation);
来说 ,内核只提供加锁 以及检测文件是否 已加锁的手 fd是需要加锁的文件的描述符 ,operation可以为
段 ,而不参与锁的控制和协调 ;强制锁是每当有系统调 下列值 :
用 open()、read()以及 write()发生 的时候 ,内核都 LOCK SH:共享锁 ,多个进程可以同时拥有对
要检查并确保这些系统调用不会违反在所访问文件上 文件的共享锁。
加的强制锁约束,如果有进程不遵守游戏规则,硬要往 LOCK EX:互斥锁,一个文件 只能上一把互斥
加了锁的文件中写入 内容 ,内核就会加 以阻拦 。 锁 。
此外 ,Linux中还引入 了两种强制锁 的变种形式 : LOCK UN:解锁操作 。
共享模式强