Книга: 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, хотя, если бы мы не сделали этот вызов, семафор все равно закрылся бы автоматически при завершении процесса и ресурсы системы были бы высвобождены.

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


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