[<<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  установить захват записи (с блокировкой)