上一节:http://blog.csdn.net/mybelief321/article/details/8989755讲述的5个基本函数函数open()、 read()、write()、lseek()和close()实现的文件的打开、读/写等操作,本节将讨论在文件已经共享的情况下 如何操作,也就是当多个用户共同使用、操作一个文件的情况。这时,Linux通常采用的方法是给文件上锁, 来避免共享的资源产生竞争的状态。
文件锁包括建议性锁和强制性锁。建议性锁要求每个上锁文件的 进程检查是否有锁存在,并且尊重已有的锁。在一般情况下,内核和系统都不使用建议性锁。强制性锁是由内 核执行的锁,当一个文件被上锁执行写入操作时,内核将阻止其他任何文件对其进行读写操作。采用强制性锁 对性能影响很大,每次读写都必须检查是否有锁存在。
在Linux中,实行文件上锁的函数有lockf()和 fcntl(),其中lockf()用于对文件施加建议性锁,而fcntl()不仅可以施加建议性锁,还可以施加强制性锁。 同时,fcntl()还能对文件的某一记录上锁,也就是记录锁。
记录锁又可分为读取锁和写入锁,其中 读取锁又称为共享锁,它能够使多个进程都能在文件的同一部分建立读取锁。而写入锁又称为排斥锁,在任何 时刻只能有一个进程在某个部分建立写入锁。当然,在文件的同一部分不能同时建立读取锁和写入锁。
fcntl()函数具有很丰富的功能,它可以对已打开的文件描述符进行各种操作,不仅包括管理文件锁 ,还包括获得设置文件描述符和文件描述符标志、文件描述符的复制等很多功能!这一次我先学习一下fcntl ()函数建立文件锁的方法,关于它的另外的用法...先学会了这个再说吧!
fcntl()函数格式
表1中的lock是一个flock结构体,结构如下:
上图中的 off_t 就是数据类 型 long int ;pid_t 就是数据类型 int,不懂这里有解释:点此解释
那么这个结构体lock中每个变量的取值含义如下表2