Книга: UNIX: взаимодействие процессов
Программа semcreate
Разделы на этой странице:
Программа semcreate
В листинге 10.3 приведен текст программы, создающей именованный семафор. При вызове программы можно указать параметр –е, обеспечивающий исключающее создание (если семафор уже существует, будет выведено сообщение об ошибке), а параметр –i с числовым аргументом позволяет задать начальное значение семафора, отличное от 1.
Листинг 10.3.[1] Создание именованного семафора
//pxsem/semcreate.c
1 #include "unpipc.h"
2 int
3 main(int argc, char **argv)
4 {
5 int с, flags;
6 sem_t *sem;
7 unsigned int value;
8 flags = O_RDWR | O_CREAT;
9 value = 1;
10 while ((c = Getopt(argc, argv, "ei:")) != –1) {
11 switch (c) {
12 case 'e':
13 flags |= O_EXCL;
14 break;
15 case 'i':
16 value = atoi(optarg);
17 break;
18 }
19 }
20 if (optind != argc – 1)
21 err_quit("usage: semcreate [ –e ] [ –i initialvalue ] <name>");
22 sem = Sem_open(argv[optind], flags, FILE_MODE, value);
23 Sem_close(sem);
24 exit(0);
25 }
Создание семафора
22 Поскольку мы всегда указываем флаг O_CREAT, нам приходится вызывать sem_open с четырьмя аргументами. Последние два используются только в том случае, если семафор еще не существует.
Закрытие семафора
23 Мы вызываем sem_close, хотя, если бы мы не сделали этот вызов, семафор все равно закрылся бы автоматически при завершении процесса и ресурсы системы были бы высвобождены.
- Программа semunlink
- Программа semgetvalue
- Программа semwait
- Программа sempost
- Программа semrmid
- Программа semsetvalues
- Программа semops
- Программа «Тайный покупатель»
- Программа Victoria
- Подпрограмма обработки прерывания
- Магическая программа, или Беспорядок по расписанию
- Что делать, если вместо русских букв в программах – непонятные символы?