Книга: 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.
- 10.1.Введение
- 10.2. Функции sem_open, sem_close и sem_unlink
- 10.3. Функции sem_wait и sem_trywait
- 10.4. Функции sem_post и sem_getvalue
- 10.5. Простые примеры
- 10.6. Задача производителей и потребителей
- 10.7. Блокирование файлов
- 10.8. Функции sem_init и sem_destroy
- 10.9. Несколько производителей, один потребитель
- 10.10. Несколько производителей, несколько потребителей
- 10.11. Несколько буферов
- 10.12. Использование семафоров несколькими процессами
- 10.13. Ограничения на семафоры
- 10.14. Реализация с использованием FIFO
- 10.15. Реализация с помощью отображения в память
- 10.16. Реализация с использованием семафоров System V
- 10.17. Резюме
- Упражнения
- 14.2. Блокировка файлов
- 14.2.3. Блокирование BSD: flock()
- Блокирование доступа к файлу
- Стратегии обработки файлов
- Блокирование файлов
- Следствия принятой логики блокирования файлов
- 15.17.4 Блокировка файлов
- 9.8. Блокирование файлов
- 10.1.6. Блокировка файлов
- Глава 13 Расширенная обработка файлов
- 13.3. Блокирование файлов
- 9.2. Блокирование записей и файлов