Захват файлов и записей

Слайд 2

По завершению этого раздела вы будете

знать, что такое захват файлов и записей

По завершению этого раздела вы будете знать, что такое захват файлов и

знать, что такое захват записей
сможете установить захват файла по чтению и по изменению
получить информацию о захвате файла

Слайд 3

ЧТО ТАКОЕ ЗАХВАТ ЗАПИСИ И ФАЙЛА?

Запись - это последовательный набор байтов в

ЧТО ТАКОЕ ЗАХВАТ ЗАПИСИ И ФАЙЛА? Запись - это последовательный набор байтов
файле
Захват записи по чтению (разделяемый доступ) не дает другим процессам установить захват записи по изменению
Захват записи по изменению (эксклюзивный доступ) не дает другим процессам установить захват записи по чтению/изменению, пока этот захват по изменению не будет снят
Рекомендательный захват (advisory lock): захват записи проверяется только перед попыткой установки захвата
Принудительный захват (mandatory lock): захват записи проверяется ядром перед выполнением операций ввода/вывода

Слайд 4

Mandatory/advisory

По умолчанию захват происходит в advisory режиме
Mandatory locking включается атрибутом файла: bash>chmod

Mandatory/advisory По умолчанию захват происходит в advisory режиме Mandatory locking включается атрибутом
+l file
Не работает на NFS (ваши домашние каталоги подключаются по NFS).
Используйте /tmp

Слайд 5

Установка захвата

#include
#include
#include
int fcntl(int fildes, int cmd,

Установка захвата #include #include #include int fcntl(int fildes, int cmd, struct flock
struct flock *arg);
значения cmd
F_GETLK получить информацию о захвате записи
F_SETLK установить захват записи
F_SETLKW установить захват записи (с блокировкой)

Слайд 6

struct flock

typedef struct flock
{
short l_type;
/* F_RDLCK, F_WRLCK, F_UNLCK */

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;