Листинг 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.