ЗАХВАТ ФАЙЛОВ И ЗАПИСЕЙ Системные вызовы и библиотеки Unix SVR4
По завершению этого раздела вы будете знать, что такое захват файлов и записей знать, что такое захват записей сможете установить захват файла по чтению и по изменению получить информацию о захвате файла
ЧТО ТАКОЕ ЗАХВАТ ЗАПИСИ И ФАЙЛА? Совместные процессы работают вместе, выполняя определенным образом одну задачу. Запись - это последовательный набор байтов в файле Захват записи по чтению (разделяемый доступ) не дает другим процессам установить захват записи по изменению Захват записи по изменению (эксклюзивный доступ) не дает другим процессам установить захват записи по чтению/изменению, пока этот захват по изменению не будет снят Допустимое захватывание (advisory lock): захват записи проверяется прикладной программой перед попыткой установки захвата Обязательное захватывание (mandatory lock): захват записи проверяется ядром перед выполнением операций ввода/вывода
Mandatory/advisory По умолчанию захват происходит в advisory режиме Mandatory locking включается атрибутом файла: bash>chmod +l file Не работает на NFS (ваши домашние каталоги подключаются по NFS). Используйте /tmp
Установка захвата #include int fcntl(int fildes, int cmd, struct flock *arg); значения cmd F_GETLK получить информацию о захвате записи F_SETLK установить захват записи F_SETLKW установить захват записи (с блокировкой)
struct flock typedef struct flock { short l_type; /* F_RDLCK, F_WRLCK, F_UNLCK */ short l_whence; /* SEEK_SET, SEEK_CUR, SEEK_END */ off_t l_start; off_t l_len; /* len == 0 means until end of file */ long l_sysid; pid_t l_pid; long pad[4]; /* reserve area */ } flock_t;
lockf (3C) ИСПОЛЬЗОВАНИЕ #include int lockf (int fildes, int function, long size); ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ успех - 0 неуспех - -1 и errno установлена