[<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
 Сценарии допустимого захвата записи

Допустимое захватывание не взаимодействует с подсистемой ввода/вывода.
Эта форма захвата не поддерживается такими системными вызовами, как
open(2), read(2) или write(2). Контроль над записью осуществляется
установкой подходящего захвата записи перед операцией ввода/вывода.
Все процессы, осуществляющие доступ к файлу, должны взаимодействовать
с использованием fcntl(2) или lockf(3C). Допустимое захватывание
зависит от индивидуального процесса, применяющего захват записи.
Следующие два сценария описывают ситуацию, когда четыре процесса хотят
получить доступ к одной и той же записи в данном файле.
Сценарий 1:
Процесс A успешно устанавливает на запись захват по чтению. Этот
захват не дает другим процессам устанавливать захват по изменению на
эту же запись. Процесс B также успешно устанавливает на эту же запись
захват по чтению. Когда процесс C пытается захватить эту запись по
изменению, он либо блокируется, либо возвращает неуспех, в зависимости
от значения аргумента cmd. Процесс C не сможет установить захват по
изменению, пока оба процесса A и B не снимут захват по чтению. Процесс
D несовместный процесс. Например, процесс D может быть редактором vi
над файлом. Любой несовместный процесс, с правами доступа владельца
или группы, может читать или изменять захваченную запись. При
допустимом захвате записи процессы должны быть совместными, должны
проверять, можно ли захватывать запись с помощью fcntl(2) или
lockf(3C), и действовать соответственно.
Сценарий 2:
Процесс A успешно устанавливает на запись захват по изменению. Захват
по изменению - это эксклюзивный захват. Следовательно, процесс В либо
блокируется, либо fcntl(2) при попытке установить захват по изменению
возвращает -1. Процесс С тоже либо блокируется, либо возвращает -1.
Когда процесс А снимает захват по изменению, процесс В или процесс С
могут установить свой захват по изменению. Процесс D, как описано в
сценарии 1, несовместный процесс.
Замечание: Этот файл имеет права доступа на чтение/изменение для
владельца и группы. Можно попытаться изменить права доступа на
чтение/изменение только для владельца и использовать бит установки
идентификатора пользователя в программе, чтобы разрешить доступ к
этому файлу.
__________________________________________________________

Сценарий 1:

1.   Процесс A устанавливает захват по чтению - успех

2.   Процесс В устанавливает захват по чтению - успех

3.   Процесс C  пытается установить  захват по  изменению - блокировка
     или неуспех

4.   Процесс D читает/изменяет - успех

Сценарий 2:

1.   Процесс A устанавливает захват по изменению - успех

2.   Процесс В  пытается установить  захват по чтению - блокировка или
     неуспех

3.   Процесс C  пытается установить  захват по чтению - блокировка или
     неуспех

4.   Процесс D читает/изменяет - успех