Читаем UNIX: взаимодействие процессов полностью

В листинге 11.5 приведен текст программы semops, позволяющей выполнять последовательность действий над набором семафоров.

Параметры командной строки

7-19 Параметр –n соответствует установленному флагу IPC_NOWAIT для каждой операции, а параметр –u аналогичным образом позволяет указать для каждой операции флаг SEM_UNDO. Обратите внимание, что функция semop позволяет указывать свой набор флагов для каждого элемента структуры sembuf (то есть для каждой из операций в отдельности), но для простоты мы в нашей программе задаем одинаковые флаги для всех операций.

Выделение памяти под набор операций

20-29 После открытия семафора вызовом semget мы выделяем память под массив структур sembuf, по одному элементу на каждую операцию из командной строки. В отличие от предыдущих двух программ эта позволяет пользователю задать меньше команд, чем имеется семафоров в наборе.

Выполнение операций

30 Вызов semop выполняет последовательность операций над семафорами набора.

Листинг 11.5. Программа semops

//svsem/semops.c

1  #include "unpipc.h"

2  int

3  main(int argc, char **argv)

4  {

5   int с, i, flag, semid, nops;

6   struct sembuf *ptr;

7   flag = 0;

8   while ((c = Getopt(argc, argv, "nu")) != –1) {

9    switch (c) {

10   case 'n':

11    flag |= IPC_NOWAIT; /* для всех операций */

12    break;

13   case 'u':

14    flag |= SEM_UNDO; /* для всех операций */

15    break;

16   }

17  }

18  if (argc = optind < 2) /* argc – optind = количество оставшихся аргументов */

19   err_quit("usage: semops [ –n ] [ –u ] operation …");

20  semid = Semget(Ftok(argv[optind], 0), 0, 0);

21  optind++;

22  nops = argc – optind;

23  /* выделение памяти под операции, сохранение их в массиве и выполнение */

24  ptr = Calloc(nops, sizeof(struct sembuf));

25  for (i = 0; i < nops; i++) {

26   ptr[i].sem_num = i;

27   ptr[i].sem_op = atoi(argv[optind + i]); /* <0, 0, or >0 */

28   ptr[i].sem_flg = flag;

29  }

30  Semop(semid, ptr, nops);

31  exit(0);

32 }

<p>Примеры</p>

Теперь мы продемонстрируем работу пяти приведенных выше программ и исследуем некоторые свойства семафоров System V:

solaris % touch /tmp/rich

solaris % semcreate –e /tmp/rich 3

solaris % semsetvalues /tmp/rich 1 2 3

solaris % semgetvalues /tmp/rich

semval[0] = 1

semval[1] = 2

semval[2] = 3

Сначала мы создали файл с именем /tmp/rich, который использовался при вызове ftok для вычисления идентификатора набора семафоров. Программа semcreate создает набор с тремя элементами. Программа semsetvalues устанавливает значения этих элементов (1, 2 и 3), a semgetvalues выводит их значения.

Теперь продемонстрируем атомарность выполнения последовательности операций над набором:

solaris % semops –n /tmp/rich –1 –2 –4

semctl error: Resource temporarily unavailable

solaris % semgetvalues /tmp/rich

semval[0] = 1

semval[1] = 2

semval[2] = 3

Перейти на страницу:

Все книги серии Мастер-класс

Секреты резьбы по дереву
Секреты резьбы по дереву

Изделия из древесины и материалов, имитирующих ее текстуру, привычным образом окружают нас в повседневной жизни, поэтому мы относимся к ней как к чему-то обыденному. Но как только ее коснется умелая рука мастера резьбы по дереву, рождается произведение искусства и раскрываются такие качества древесины, как богатая фактура, разнообразие цветов, особая теплота. Эта книга поможет читателю открыть для себя удивительный мир творчества и познать секреты резьбы по дереву. Автор надеется, что начинающие резчики найдут в ней интересный и полезный материал, который позволит им стать мастерами. В приложении представлены рисунки орнаментов и различных узоров, которые на первых порах можно копировать, а по мере приобретения навыка на их основе разрабатывать свои образцы.

Галина Алексеевна Серикова

Сделай сам / Хобби и ремесла / Руководства / Дом и досуг / Словари и Энциклопедии

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных