一个记录上锁的问题
一个记录上锁的问题,有谁能告诉我怎样用?
就是一个程序一运行就的打开某个文件,不允许其它程序访问,下面的代码为何不行呢?
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/types.h>
struct flock* file_lock(short type, short whence)
{
static struct flock ret ;
ret.l_type = type ;
ret.l_start = 0 ;
ret.l_whence = whence ;
ret.l_len = 0 ;
ret.l_pid = getpid() ;
return &ret ;
}
int main()
{
int pidfd;
pidfd=open("/etc/pidfile",O_CREAT);
fcntl(pidfd, F_SETLKW, file_lock(F_WRLCK, SEEK_SET));
while(1)
{
sleep(1000);
}
}
执行了相面的程序后,依然可以访问/etc/pidfile,为什么?
问题点数:20、回复次数:5Top
1 楼nodummy(三甲 之 Linux/Unix里面甭给我分,谁给我分我和谁急)回复于 2005-02-04 19:41:50 得分 20
你用的flags是O_CREAT当然不行了,你用O_WRONLY看看,其他进程就不能访问了Top
2 楼tb01412(tb)回复于 2005-02-04 20:38:57 得分 0
但还是不行呢?
Top
3 楼nodummy(三甲 之 Linux/Unix里面甭给我分,谁给我分我和谁急)回复于 2005-02-04 21:53:41 得分 0
上面我搞错了,和那个没关系。但是这个所操作每次都返回-1,也就是设置失败了,不知道怎么回事?Top
4 楼nodummy(三甲 之 Linux/Unix里面甭给我分,谁给我分我和谁急)回复于 2005-02-04 21:58:34 得分 0
我修改了一下打开的参数,用了O_RDWR就成功了,其他的譬如O_RDONLY和O_WRONLY都失败了
不知道是不是有什么限制(不过是用flock就没有这个问题)Top
5 楼tb01412(tb)回复于 2005-02-05 18:34:02 得分 0
谢谢楼上的!Top




