学习心得:Linux系统文件锁

运维 系统运维
在我们应用电脑时,会遇到很多问题,Linux作为电脑操作系统中的主流,你了解Linux系统么?本文为你详细介绍Linux系统文件锁,为你在学习Linux系统文件锁时起一定的作用。文件锁是Linux上最常用的进程间同步机制之一。

在我们应用电脑时,会遇到很多问题,Linux作为电脑操作系统中的主流,你了解Linux系统么?本文为你详细介绍Linux系统文件锁,为你在学习Linux系统文件锁时起一定的作用。文件锁是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系统文件锁的知识要点对你有所帮助。

【编辑推荐】

  1. Linux操作系统基本知识
  2. 大致对Fedora Linux安装介绍
  3. 学习手册:Linux操作系统下的poll和select
  4. Linux操作系统吸引我们的优点
  5. 各种深入讲解Linux操作系统
责任编辑:小霞 来源: IT专家网
相关推荐

2009-11-06 17:31:03

Oracle密码文件

2009-09-17 13:38:42

LINQ to XML

2011-04-06 11:08:52

Java异常

2012-06-27 14:04:22

folly

2009-06-23 09:05:10

Seam框架JSF

2009-08-18 10:59:46

C#枚举类型

2009-09-14 18:19:49

LINQ模糊查询

2011-01-04 09:34:23

LambdaC#

2009-09-10 16:35:06

CCNA考试培训

2009-07-15 18:11:17

MVC模式学习

2009-08-13 18:10:31

C#静态构造函数

2009-10-26 11:34:42

linux makef

2009-10-26 11:49:26

2010-06-17 18:31:12

绘制UML序列图

2017-02-21 17:59:26

2017-03-09 15:05:49

Linux

2011-03-15 16:19:08

iptables

2009-06-25 08:55:53

Linux

2009-12-17 16:18:00

CCNP考试心得

2011-04-08 17:22:39

点赞
收藏

51CTO技术栈公众号