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

1   #include "unpipc.h"

2   /* максимальные величины, выше которых ограничение не проверяется */

3   #define MAX_NIDS 4096 /* максимальное количество идентификаторов семафоров */

4   #define MAX_VALUE 1024*1024 /* максимальное значение семафора */

5   #define MAX_MEMBERS 4096 /* максимальное количество семафоров в наборе */

6   #define MAX_NOPS 4096 /* максимальное количество операций за вызов semop */

7   #define MAX_NPROC Sysconf(_SC_CHILD_MAX)

8   int

9   main(int argc, char **argv)

10  {

11   int i, j, semid, sid[MAX_NIDS], pipefd[2];

12   int semmni, semvmx, semmsl, semmns, semopn, semaem, semume, semmnu;

13   pid_t *child;

14   union semun arg;

15   struct sembuf ops[MAX_NOPS];

16   /* сколько наборов с одним элементом можно создать? */

17   for (i = 0; i <= MAX_NIDS; i++) {

18    sid[i] = semget(IPC_PRIVATE, 1, SVSEM_MODE | IPC_CREAT);

19    if (sid[i] == –1) {

20     semmni = i;

21     printf("%d identifiers open at once\n", semmni);

22     break;

23    }

24   }

25   /* перед удалением находим максимальное значение, используя sid[0] */

26   for (j = 7; j < MAX_VALUE; j += 8) {

27    arg.val = j;

28    if (semctl(sid[0], 0, SETVAL, arg) == –1) {

29     semvmx = j – 8;

30     printf("max semaphore value = %d\n", semvmx);

31     break;

32    }

33   }

34   for (j = 0; j < i; j++)

35    Semctl(sid[j], 0, IPC_RMID);

36   /* определяем максимальное количество семафоров в наборе */

37   for (i = 1; i <= MAX_MEMBERS; i++) {

38    semid = semget(IPC_PRIVATE, i, SVSEM_MODE | IPC_CREAT);

39    if (semid == –1) {

40     semmsl = i-1;

41     printf("max of %d members per set\n", semmsl);

42     break;

43    }

44    Semctl(semid, 0, IPC_RMID);

45   }

46   /* сколько всего семафоров можно создать? */

47   semmns = 0;

48   for (i = 0; i < semmni; i++) {

49    sid[i] = semget(IPC_PRIVATE, semmsl, SVSEM_MODE | IPC_CREAT);

50    if (sid[i] == –1) {

51     /*

52      До этого в наборе было semmsl элементов,

53      но теперь мы уменьшаем количество элементов на 1 и смотрим.

54      не получится ли создать семафор

55     */

56     for (j = semmsl-1; j > 0; j--) {

57      sid[1] = semget(IPC_PRIVATE, j, SVSEM_MODE | IPC_CREAT);

58      if (sid[i] != –1) {

59       semmns += j;

60       printf("max of %d semaphores\n", semmns);

61       Semctl(sid[i], 0, IPC_RMID);

62       goto done;

63      }

64     }

65     err_quit("j reached 0, semmns = %d", semmns);

66    }

67    semmns += semmsl;

68   }

69   printf("max of %d semaphores\n", semns);

70  done:

71   for (j = 0; j < i; j++)

72    Semctl(sid[j], 0, IPC_RMID);

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

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

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

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

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

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

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

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

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

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

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

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

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

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