ЗАХВАТ ФАЙЛОВ И ЗАПИСЕЙ Системные вызовы и библиотеки 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, off_t size); ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ успех - 0 неуспех - -1 и errno установлена