发信人: tcpip (俺的昵称改了), 信区: cnunix
标 题: 本地进程间通信第一讲:文件加锁(三)
发信站: 哈工大紫丁香 (Sun Sep 26 15:12:31 1999), 转信
发信人: cpu (奔腾的心), 信区: Solaris
发信站: 华南网木棉站 (Fri Jul 31 19:34:57 1998), 转信
2.用creat调用。creat调用时若文件存在,则不会出错,只会将文件清空,
即长度截取为0,有一个例外:若对存在的文件没有写权限,则调用出错。
所以可以creat一个没有写入许可的文件来作为一个临时文件锁。但是要注
意的是,如果进程有特殊权限比如是root,就可以写入任何文件。以下是
利用creat调用实现lockfile和unlockfile的lockfile.c:
/* lockfile.c using creat, by cpu */
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#define LOCKPERMS 0 /* write forbidden */
#define TRUE 0
#define FALSE -1
char lock[64];
int lockfile(char *file)
{
int fd;
int timeout = 0;
sprintf(lock, "%s.lck", file);
while ((fd = creat(lock, LOCKPERMS)) < 0) {
if (++timeout == 10) return FALSE;
usleep(500000);
continue;
}
close(fd);
return TRUE;
}
int unlockfile(char *file)
{
sprintf(lock, "%s.lck", file);
return(unlink(lock));
}
--
******************************************************
青岛啤酒,可能是世界上最好的啤酒 。。。 。。。
******************************************************
※ 修改:.trueip 于 Sep 26 15:16:17 修改本文.[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)
页面执行时间:3.150毫秒