c - flock() 不会阻止其他进程获得独占锁

标签 c macos file-locking flock

我写了一个简单的代码来测试 flock():

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

    int fd1;

    if (fd1 = open( "file1", O_RDWR | O_CREAT | O_TRUNC) == -1)
    {
        perror("Cannot open file 1.\n");
        fflush(stdout);
    }
    else
    {
        printf("file opened 1.\n");
        fflush(stdout);
    }

    if(flock(fd1,LOCK_EX)==0)
    {
        printf("THE FILE WAS LOCKED 1.\n");
    }
    else if(errno == EACCES)
    {
        printf("The file is locked 1.\n");
    }

    std::cout<<"Enter any key:"<<std::endl;
std::cin >> input;

    close(fd1);
    std::cout<<"Lock was released."<<std::endl;

    return 0;
}

当我运行可执行文件“Alex”两次时:

第一个过程:

$ ./Alex 
file opened 1.
THE FILE WAS LOCKED 1.
Enter any key:

第二个过程:

$ ./Alex 
file opened 1.
THE FILE WAS LOCKED 1.
Enter any key:

在事件监视器中,我看到两个具有两个不同 PID 的 Alex 实例。

似乎 flock() 不起作用。我错过了什么?谢谢!

最佳答案

尝试:

if ((fd1 = open( "file1", O_RDWR | O_CREAT | O_TRUNC)) == -1)
//  ^                                                ^

因为你写的是一样的:

if (open( "file1", O_RDWR | O_CREAT | O_TRUNC) == -1)
    fd1 = TRUE;
else
    fd1 = FALSE;

因此,您正试图锁定 stdinstdout(取决于 open() 的结果)。

关于c - flock() 不会阻止其他进程获得独占锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26888728/

相关文章:

macos - 适用于 Mac 的 Armv6 汇编程序

linux - 独占文件锁(PID文件实现)

c - 在C中形成数组并打印列/行

c - 链表数组初始化

c++ - Objective-C - 以编程方式设置自定义 Mac 屏幕分辨率

macos - Mac 上未调用 CloudKit didReceiveRemoteNotification

c - 文件锁允许打开文件

c - C语言中如何获取一个整数的总位数?

使用调试和分析选项编译时,代码在执行时立即崩溃