Слайд 2По завершению этого раздела вы будете
знать, что такое захват файлов и записей
знать, что такое захват записей
сможете установить захват файла по чтению и по изменению
получить информацию о захвате файла
Слайд 3ЧТО ТАКОЕ ЗАХВАТ ЗАПИСИ И ФАЙЛА?
Запись - это последовательный набор байтов в
файле
Захват записи по чтению (разделяемый доступ) не дает другим процессам установить захват записи по изменению
Захват записи по изменению (эксклюзивный доступ) не дает другим процессам установить захват записи по чтению/изменению, пока этот захват по изменению не будет снят
Рекомендательный захват (advisory lock): захват записи проверяется только перед попыткой установки захвата
Принудительный захват (mandatory lock): захват записи проверяется ядром перед выполнением операций ввода/вывода
Слайд 4Mandatory/advisory
По умолчанию захват происходит в advisory режиме
Mandatory locking включается атрибутом файла:
bash>chmod
+l file
Не работает на NFS (ваши домашние каталоги подключаются по NFS).
Используйте /tmp
Слайд 5Установка захвата
#include
#include
#include
int fcntl(int fildes, int cmd,
struct flock *arg);
значения cmd
F_GETLK получить информацию о захвате записи
F_SETLK установить захват записи
F_SETLKW установить захват записи (с блокировкой)
Слайд 6struct 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;