режими блокування

printf ( "Нащадок готовий до запису

default. wait (NULL); break;

Цей приклад ілюструє можливості сериализации процесів. Проте тут все одно можливі читання і запис в процесі-нащадку. Такий варіант блокування називається advisory locking (необов'язкова блокування). При його установці не було здійснено жодних додаткових перевірок того, чи повинні системні функції open. read і write через блокування заборонятися при виклику. Для advisory locking приймається, що користувач сам є відповідальним за перевірку того, чи існують певні блокування чи ні. Неможливо заборонити всім процесам доступ до файлу. Тільки процеси, опитувальні наявність блокування за допомогою fcntl. блокуються при її наявності (і то не завжди).

Для інших випадків є так звані строгі блокування (mandatory locking). Ці блокування забороняють процесу отримувати доступ за допомогою функцій read або write до даних, які раніше були блоковані іншим процесом через fcntl.

Суворі блокування можна дозволити, встановивши біт Set-Group-ID і знявши біт виконання для групи, наприклад:

int mandatory_lock (int fd)

struct stat statbuffer;

if (fstat (fd, statbuffer) <0)

fprintf (stderr, "Помилка при виклику fstat # 92; n");

if (fchmod (fd (statbuffer.st_mode

fprintf (stderr, "Не можу встановити сувору

> Строга блокування є залежною від системи. Однак, вона не може запобігти видалення файлу через unlink ().

Якщо за допомогою open () відкривається файл з прапорами O_TRUNC і O_CREAT і для цього файлу встановлена ​​сувора блокування, то повертається помилка зі значенням errno = EAGAIN.

Схожі статті