· [Java论坛][安全论坛][数据库论坛][操作系统论坛]
· [访谈] 网银安全系列访谈之:惊心动魄网银故事
· [热点专题] 网银安全系列 3G上网卡巡礼
· [订阅IT技术周刊][IT资源下载专区][病毒求助专区]
· [热点] 跨站脚本十二问 四步防范Conficker
· [热点] Windows 7 RC版公开下载 憾缺中文版

关于Linux操作系统文件锁的几个知识要点

发布时间:2008.03.31 06:05     来源:赛迪网    作者:skid

文件锁是Linux上最常用的进程间同步机制之一,相比sysv的信号量,文件锁更容易使用(sysv信号量的麻烦之处在于它的key获取机制)。

APUE对文件锁做了详尽的描述,其中需要注意的有以下几点,原文可参见APUE2的14.3节:

1、文件锁(file_lock)与文件(确切的说是文件的inode)及进程捆绑,Linux实现中文件的file_lock结构挂在该文件对应的inode结构中,而file_lock结构中包含了该锁所属进程的pid。这种实现方式造成了两种后果:

a.进程退出时,属于该进程的所有文件锁被释放。

b.关闭加锁进程所属的任何一个指向加锁文件的fd或file时,锁被释放。这是由于file_lock结构选择挂在inode上而不是fd或file(内核结构,fd的下一站),所以无法具体区分文件锁对应的fd或file上。这点需要特别注意,APUE上列出了两个例子,第一个对应fd关闭,第二个对应file关闭,这两种情形都会导致锁释放:

fd1 = open(pathname, ...);
read_lock(fd1, ...);
fd2 = dup(fd1);
close(fd2);

fd1 = open(pathname, ...);
read_lock(fd1, ...);
fd2 = open(pathname, ...)
close(fd2);

APUE中有一个FreeBSD的文件锁实现图可以帮助理解以上内容,该图对Linux也是适用的。

2、fork()后子进程不继承父进程的锁,这个很容易理解,锁就是被进程用来执行互斥等任务的,如果承就乱了。

3、exec()可以继承锁,取决于exec()后加锁fd是否被关闭(close-on-exec),这是因为exec()前后进程还是一个。

(责任编辑:云子)


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· 在Linux终端中“\”和“--”所代表含义 (03-28) · Linux操作系统下轻松刻录CD-ROM数据光盘 (03-28)
· 新闻:五年内开源软件订购模式将成主流 (03-28) · 办公软件:OpenOffice.org 2.4.0版发布 (03-27)
· 刻录软件:Nero Linux 3.5.0.1新版发布 (03-27) · Linux和Windows双操作系统Grub丢失恢复 (03-27)
· Linux下安装Darwin流服务器的方法和步骤 (03-27) · Linux2.4内核和2.6内核对Initrd处理流程 (03-27)
· Linux下查看CPU类型三种方法的区别介绍 (03-27) · Linux系统上配置Nginx+Mongrel cluster (03-27)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
资讯 通信 IT产品 IT技术 信息化
2009第七届中国电脑商年会直播
·创业投资系列访谈:产业..
·特别策划:视频网站系列..
·专题:网游虚拟货币新规..
专题:6月上市手机新品回顾及7月新机展望
·2009年中国电信业信息化..
·专题:把iPhone 3GS“解..
·WAPI重启国际标准进程 ..
专题:09年中盘点-联想春季打印机新品回顾
·InfoComm 2009 视听与集..
·网游背后的故事 网游服..
·[专题]联想ThinkPad T40..
BizSpark:微软为技术创业企业点燃火花
·社区活动:我的IT求知生..
·访谈:内网安全2009系列..
·安全访谈:网银安全之Sa..