fcntl не блокирует/разблокирует файлы [Unix - C]

Я пытаюсь использовать fcntl lib (при программировании UNIX c) для блокировки или разблокировки файлов, но, похоже, это не блокировка, и я не знаю, почему. Я не получаю никаких ошибок, похоже, что программа выполняет блокировку, но на самом деле я могу читать/записывать файл и не заблокирован

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

person daniel    schedule 25.05.2021    source источник
comment
Блокировка носит только рекомендательный характер. Другой процесс должен проверить, установлена ​​ли для файла эта рекомендательная блокировка.   -  person Ted Lyngmo    schedule 26.05.2021


Ответы (1)


Очень смело с вашей стороны утверждать, что вы заблокировали файл, не проверив результат fcntl.

Во всяком случае, это ожидаемое поведение. Все, что делает блокировка, — это предотвращает получение блокировки другими.[1] Она никому не мешает читать файл или записывать в него.


  1. Блокировка записи предотвращает получение блокировки кем-либо, в то время как блокировка чтения предотвращает получение блокировки записи.
person ikegami    schedule 25.05.2021