发信人: tcpip (俺的昵称改了), 信区: cnunix
标  题: 本地进程间通信第一讲:文件加锁(五)
发信站: 哈工大紫丁香 (Sun Sep 26 15:14:42 1999), 转信

发信人: cpu (奔腾的心), 信区: Solaris
发信站: 华南网木棉站 (Mon Aug  3 13:49:36 1998), 转信

本篇是对上面四篇有关文件加锁的方法的一点补充。
对于bsd风格的函数flock,也有system V的等同解决方法,即用fcntl调用。
其中要用到一个flock_t的结构,定义如下:

typedef struct flock {
          short   l_type;     /* lock operation type */
          short   l_whence;   /* lock base indicator */
          off_t   l_start;    /* starting offset from base */
          off_t   l_len;      /* lock length; l_len == 0 means
                                 until end of file */
          long    l_sysid;    /* system ID running process holding lock */
          pid_t   l_pid;      /* process ID of process holding lock */
          long    l_pad[4];   /* reserve area */
} flock_t;

l_type指出锁的类型,可以是共享锁F_RDLCK,排斥锁F_WRLCK和解除锁F_UNLCK;
l_whence指出锁的文件基点,SEEK_SET、SEEK_CUR或者SEEK_END;
l_start指出所的生效点,即相对基点l_whence的偏移量;
l_len指出锁的生效范围,即锁住的字节数,零表示一直锁到文件尾;
l_sysid是持锁进程的系统标始号;
l_pid是持锁进程的进程号。

fcntl用于文件锁的调用方式:

        fcntl(fd, F_SETLK, flock_t * your_flock_t);

fcntl不是很好用,但是很灵活,相对上几节提及的其它几种文件加锁的方
法,fcntl可以实现对文件的某一段加锁,自然就可以实现所谓的“记录”
加锁(类似函数lockf)。另外,通过fcntl的F_GETLK的操作你可以得到文
件目前的加锁状态(同样结果放在flock_t类型的结构中),请详细地man
一下fcntl,这是个比较不好用但却非常有用处的调用!
--

        ******************************************************
                
               青岛啤酒,可能是世界上最好的啤酒 。。。 。。。

        ******************************************************
※ 修改:.trueip 于 Sep 26 15:18:28 修改本文.[FROM: dns.mtlab.hit.ed]
--
※ 转寄:.华南网木棉站 bbs.gznet.edu.cn.[FROM: dns.mtlab.hit.ed]

--
☆ 来源:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: trueip.bbs@melon.gzn]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.997毫秒