Операционная система UNIX. Руководство программиста


Блокировка файлов - часть 2


/* Устанавливаем указатель текущей позиции в начало файла */

lseek (fd, 0L, 0);

/* Делаем не более MAX_TRY попыток блокировки */

while (lockf (fd, F_TLOCK, 0L) < 0) { if (errno == EAGAIN errno == EACCES) { /* Могут быть и другие ошибки, при которых надо повторить попытку */ if (++try < MAX_TRY) { (void) sleep (2); continue; } (void) fprintf (stderr, "Файл занят\n"); return; } perror("lockf"); exit(2); } . . .

Надо заметить, что пример с использованием lockf(3C) выглядит проще, однако пример с fcntl(2) демонстрирует дополнительную гибкость. При использовании fcntl(2) можно установить тип блокировки и начало блокируемого сегмента просто путем присваивания нужных значений компонентам структуры. В случае lockf(3C) просто устанавливается блокировка на запись (монопольная); для того, чтобы указать начало блокируемого сегмента, нужен дополнительный системный вызов [lseek(2)].




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