fcntl 没有 lock/unlock 文件 [Unix - C]

fcntl doesn't lock/unlock the files [Unix - C]

我正在尝试使用 fcntl lib(在 UNIX c 编程中)来锁定或解锁文件,但似乎没有锁定,我不知道为什么。我没有收到任何错误,看起来程序正在执行锁定但实际上我可以 read/write 文件并且没有锁定

    if (enter == 2){
    getchar ();
    int fd;
    struct flock lock;
    char file[20];
    printf ("Enter file name:");
    fgets(file,20,stdin);
    printf ("opening %s\n", file);
    //Open a file descriptor to the file
    fd = open (file, O_RDWR);
    printf ("locking\n");
    //Initialize the flock structure
    memset (&lock, 0, sizeof(lock));
    lock.l_type = F_WRLCK;
    //Place a write lock on the file
    fcntl (fd, F_SETLK, &lock);
    
    printf ("locked; hit Enter to unlock... ");
    //Wait for the user to hit Enter
    getchar ();
    printf ("unlocking\n");
    //Release the lock
    lock.l_type = F_UNLCK;
    fcntl (fd, F_SETLK, &lock);
    close (fd);

你没有检查fcntl的结果就声称你锁定了文件,这太大胆了。

无论如何,这是预期的行为。获得锁只是防止其他人获得锁。[1]它不会阻止任何人读取或写入文件。


  1. 写锁防止任何人获得锁,而读锁只防止获得写锁。