【问题标题】:filelock allows opening of filesfilelock 允许打开文件
【发布时间】:2012-06-16 11:09:31
【问题描述】:

我在我的 ubuntu 机器上执行了以下 c 代码...我已经阅读了 fcntl() 用于锁定文件的信息,如果设置了 F_WRLCK 选项,则即使读取也将不允许。 ..所以我启动了这个程序,在放弃锁定之前按回车键我尝试以两种方式打开文件 - 直接双击 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;
}

【问题讨论】:

    标签: c file file-locking


    【解决方案1】:

    fcntl 锁是纯粹的咨询锁。它们唯一的作用是在无法获得锁时导致fcntl F_SETLK 调用阻塞。它们对 IO 操作绝对没有影响。当需要同步时,在执行 IO 之前获取所需的锁取决于您的程序。

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

    【讨论】:

    • @R..我不明白...true fcntl() 阻塞直到没有获得锁但是在获得锁之后,不应该禁止读取或写入文件进行同步,因为我已经获得了写锁....如果没有,那么应该使用哪个函数
    • @R..我明白了...只需要阅读this,你的答案就很清楚了
    猜你喜欢
    • 2019-10-20
    • 1970-01-01
    • 2013-10-06
    • 1970-01-01
    • 1970-01-01
    • 2018-10-23
    • 1970-01-01
    • 2019-12-19
    • 1970-01-01
    相关资源
    最近更新 更多