[<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
 Захват записи

Используемая при захвате структура flock приведена на следующей
странице. Чтобы выполнить захват записи, ваша программа должна
объявить struct flock, присвоить значение ее полям и передать адрес
struct flock системному вызову fcntl в качестве третьего аргумента.
Поля структуры захвата:
 l_type указывает тип захвата. Его возможные значения:

        F_RDLCK захват по чтению

        F_WRLCK захват по изменению

        F_UNLCK снятие  захвата.   Только  процесс,  который  захватил
                запись, может освободить ее. F_UNLCK будет проставлена
                неявно, когда  процесс завершается  вызовом  exit  или
                когда   файл    закрывается   с    помощью   close(2).
                Освобождение  сегмента   из  середины  большой  записи
                оставляет два захваченных сегмента с двух концов.

 l_whence является   признаком относительной стартовой позиции записи:
        SEEK_SET (0)  - от  начала файла,  SEEK_CUR (1)  - от  текущей
        позиции в  файле и  SEEK_END (2)  - от  конца файла.  Это поле
        аналогично аргументу whence в системном вызове lseek(2).

 l_start  определяет    начальную  позицию  записи  в  зависимости  от
        l_whence.  Это   поле  аналогично   аргументу  offset   вызова
        lseek(2). l_start может быть отрицательным.

 l_len  определяет   длину   захватываемой   записи.   Значение   ноль
        захватывает/освобождает от  начальной позиции  до конца файла.
        Например, захват  всего файла  достигается установкой  в  ноль
        полей  l_whence,   l_start  и   l_len.  Любые   новые  данные,
        появляющиеся в файле, также будут захвачены.

 l_pid  устанавливается операционной  системой  равным  идентификатору
        процесса, который  захватил запись,  когда выполняется  запрос
        F_GETLK.

 l_sysid устанавливается   операционной   системой  равным  системному
        RFS-идентификатору  этого   файла,  когда  выполняется  запрос
        F_GETLK.
                            ЗАХВАТ ЗАПИСИ


fcntl.h:

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;

/* file segment locking types */
#define F_RDLCK 01      /* Read lock */
#define F_WRLCK 02      /* Write lock */
#define F_UNLCK 03      /* Remove lock(s) */