filelock允许打开文件

时间:2012-06-16 11:09:31

标签: c file file-locking

我在我的ubuntu机器上执行了以下c代码...我已经阅读了fcntl()用于锁定文件的内容,并且如果设置了F_WRLCK opton ,则不允许读取。 ..所以我开始这个程序和放弃锁之前按Enter键我尝试以两种方式打开文件 - 直接双击file1.cpp并在新的中运行一个不同的c程序终端......文件打开的时间......所以fcntl()允许在设置F_WRLCK时打开这些文件...

int main(int argc, char *argv[])
{

struct flock fl = {F_WRLCK, SEEK_SET,   0,      0,     0 };
int fd;

fl.l_pid = getpid();

if ((fd = open("/home/file1.cpp", O_WRONLY)) == -1)
{
    perror("open");
    exit(1);
}


if (fcntl(fd, F_SETLKW, &fl) == -1) 
{
    perror("fcntl");
    exit(1);
}


printf("Press <RETURN> to release lock: ");
getchar();

fl.l_type = F_UNLCK;  /* set to unlock same region */

if (fcntl(fd, F_SETLK, &fl) == -1)
{
    perror("fcntl");
    exit(1);
}

printf("Unlocked.\n");

close(fd);

return 0;
}

1 个答案:

答案 0 :(得分:0)

fcntl锁是纯粹的咨询锁。它们的唯一效果是在无法获取锁定时导致fcntl F_SETLK调用阻止。它们对IO操作完全没有影响。在需要同步时,需要在执行IO之前获取所需的锁定。

这完全类似于使用互斥锁来保护内存中的对象。互斥锁不会阻止您读取或写入内存地址;它只是一个协议,用于确保您的程序只能读写和适当的时间。