Unix Man (Справочное руководство)


FCNTL(2) - часть 2


Блокировка на чтение предотвращает блокировку защищаемой области каким-либо процессом на запись. Для данного сегмента файла могут одновременно существовать несколько блокировок на чтение. Дескриптор, используемый для установления блокировки на чтение, должен быть ассоциирован с файлом, открытым с правом чтения.

Блокировка на запись предотвращает блокировку защищаемой области на чтение или запись. Одновременно может существовать не более одной блокировки на запись данного сегмента файла. Дескриптор, используемый для установления блокировки на запись, должен быть ассоциирован с файлом, открытым с правом записи.

Структура типа flock содержит поля, определяющие для сегмента файла тип блокировки (l_type), начальное смещение (l_whence), относительное смещение (l_start), размер (l_len), идентификатор системы РУФ (l_sysid), идентификатор процесса (l_pid). Идентификаторы процесса и системы используются только в случае операции F_GETLK для возврата характеристик блокировки. Начало и конец блокируемой области могут выходить за конец файла, но не за начало. Можно определить блокировку, всегда действующую до конца файла, если значение поля l_len равно 0. Если значения полей l_whence и l_start равны 0, то блокировка будет распространяться на весь файл. Изменение или снятие блокировки сегмента из середины большого защищенного сегмента приводит к появлению с обоих концов двух меньших защищенных сегментов. Блокировка сегмента, который уже блокирован вызывающим процессом, приводит к удалению старого и установке нового типа блокировки. Все блокировки, ассоциированные с файлом для данного процесса, удаляются, когда файл закрывается этим процессом или когда процесс терминируется, не закрывая файл. Блокировки не наследуются порождаемым процессом при выполнении системного вызова .

Если блокировка доступа к файлу разрешена [см. ], то системные вызовы read и write для этого файла выполняются с учетом действующих блокировок.

Системный вызов fcntl завершается неудачей, если выполнено хотя бы одно из следующих условий:




Начало  Назад  Вперед