Книга: UNIX: взаимодействие процессов

10.7. Блокирование файлов

10.7. Блокирование файлов

Вернемся к задаче о порядковом номере из главы 9. Здесь мы напишем новые версии функций my_lock и my_unlосk, использующие именованные семафоры Posix. В листинге 10.10 приведен текст этих функций.

Листинг 10.10. Блокирование файла с помощью именованных семафоров Posix

//lock/lockpxsem.c
1  #include "unpipc.h"
2  #define LOCK_PATH "pxsemlock"
3  sem_t *locksem;
4  int initflag;
5  void
6  my_lock(int fd)
7  {
8   if (initflag == 0) {
9    locksem = Sem_open(Px_ipc_name(LOCK_PATH), O_CREAT, FILE_MODE, 1);
10   initflag = 1;
11  }
12  Sem_wait(locksem);
13 }
14 void
15 my_unlock(int fd)
16 {
17  Sem_post(locksem);
18 }

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

Оглавление книги


Генерация: 0.306. Запросов К БД/Cache: 2 / 0
поделиться
Вверх Вниз