[<<Previous Entry]
[^^Up^^]
[Next Entry>>]
[Menu]
[About The Guide]
Управление файлом
Системный вызов fcntl(2) используется для захвата файла и записи. Его
аргументы:
fildes дескриптор файла, обычно получают с помощью системного вызова
open(2).
cmd определяет одну из трех команд, используемых при захвате:
F_GETLK Эта команда используется, чтобы получить информацию о
захвате записи. Чтобы определить расположение записи и
тип захвата используется структура захвата flock.
F_GETLK выдает информацию о первом захвате записи,
описанной в структуре flock. Возвращаемая информация
затирает информацию, переданную системному вызову
fcntl через эту структуру. Если нет конфликтующих
захватов, структура возвращается назад неизмененной,
кроме типа захвата, который устанавливается равным
F_UNLCK.
F_SETLK Эта команда используется, чтобы установить или снять
захват записи. Структура захвата используется для
задания расположения записи, ее длины и типа захвата.
Если захват нельзя установить, fcntl вернет -1 и
установит errno.
F_SETLKW Эта команда аналогична F_SETLK, кроме того что, если
захват по чтению или изменению заблокирован другим
захватом, fcntl приостановится, пока запись не
освободится.
arg адрес структуры захвата struct flock. Поля этой структуры
описаны на следующей странице.
Как при допустимом, так и при обязательном захвате записи, захват
выполняется с использованием fcntl(2) или lockf(3C). Различие между
двумя формами захвата состоит в том, когда он проверяется. При
обязательном захватывании он проверяется перед каждой операцией
ввода/вывода. При допустимом захватывании он проверяется, когда
делается попытка захвата с помощью fcntl(2) или lockf(3).
Захваты, которые не сняты явно с использованием fcntl(2), снимаются
при завершении процесса с помощью exit.
УПРАВЛЕНИЕ ФАЙЛОМ
ИСПОЛЬЗОВАНИЕ
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>
int fcntl(int fildes, int cmd, struct flock *arg);
________________________________________
значения cmd
F_GETLK получить информацию о захвате записи
F_SETLK установить захват записи
F_SETLKW установить захват записи (с блокировкой)