c - 文件锁允许打开文件

标签 c file file-locking

我在我的 ubuntu 机器上执行了以下 c 代码...我已经阅读了有关 fcntl() 用于锁定文件的信息,并且如果设置了 F_WRLCK 选项,则甚至不允许读取。 ..所以我启动了这个程序,在放弃锁定之前,按 Enter 键,我尝试以两种方式打开该文件 - 直接双击 file1.cpp 并在新的文件中运行不同的 c 程序终端...文件打开时...那么当设置 F_WRLCK 时 fcntl() 如何允许打开这些文件...

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;
}

最佳答案

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

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

关于c - 文件锁允许打开文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11062880/

相关文章:

c - 如何只打印文件名

java - 为什么我的 while 循环需要这行代码才能运行?

php - PHP进程/服务器崩溃时如何避免文件死锁?

c# - 删除已被 WPF 控件使用的图像

c - gtk_entry_set_input_ Purpose 无法识别

c - 使用 malloc 分配 char 数组

c# - 缓慢读取数百个文件

c - 了解汉诺塔的递归解决方案

c - 如何以编程方式将整数映射到 const 字符串?

java - 在 Java(TM) 平台 SE 二进制文件中打开