当前位置: 技术问答>linux和unix
一个记录上锁的问题
来源: 互联网 发布时间:2015-09-07
本文导语: 一个记录上锁的问题,有谁能告诉我怎样用? 就是一个程序一运行就的打开某个文件,不允许其它程序访问,下面的代码为何不行呢? #include #include #include #include struct flock* file_lock(short type, short whence) ...
一个记录上锁的问题,有谁能告诉我怎样用?
就是一个程序一运行就的打开某个文件,不允许其它程序访问,下面的代码为何不行呢?
#include
#include
#include
#include
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,为什么?
就是一个程序一运行就的打开某个文件,不允许其它程序访问,下面的代码为何不行呢?
#include
#include
#include
#include
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,为什么?
|
你用的flags是O_CREAT当然不行了,你用O_WRONLY看看,其他进程就不能访问了