|
创建锁文件这用来控制独占式访问资源( 如串口 )或者一些不常访问的文件是不错的,但对于较大的共享型文件则不太适合。
假如写了一个程序,而这个程序需要其它许多不同的程序对其进行读取操作更新。这里,可能会有一些问题,比如有一个程序连续一段较长的时间里都要访问数据,而其它的程序同时也要对这些数据进行处理。当然不能让好几个程序要一直等到之前那个程序完成了自己的工作后( 甚至一直都会占用着 )才能访问数据,所以这里需要一些协调措施以满足同时访问同一个文件。
对于上述问题,调协的方法是,不能对文件中的数据都由一个程序全盘进行锁定,而是要对一部分数据进行锁定,而其它部分不锁定以能让别的程序可以正常访问。比如一个文件文件分为A,B,C,D 四个部分。程序1 需要访问独占式的访问 B 部分,而其它 3 个部分不需要访问,那么程序1就只需要把 B 部分锁定住即可,让其余部分可以让别的程序可以进行访问。
那么,在 linux 里,有两种方式可以进行这种“区域锁” 的操作,即通过 fcntl() 和 lockf() 函数来实现。
但是,需要注意的是,fcntl() 和 lockf() 函数不能同时混用,因为它们使用了不同的底层实现,所以一直只需要用其中的一个即可!
fcntl() 函数的原型为:
#include <fcntl.h>
int fcntl(int fildes, int command, ...);
细节分析:
http://www.groad.net/bbs/read.php?tid=591&fpage=2 |
|