Читаем UNIX Network Programming. Volume 2 Second Edition. Interprocess Communications полностью

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);

73   /* определяем количество операций за вызов semop */

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

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

Основы программирования в Linux
Основы программирования в Linux

В четвертом издании популярного руководства даны основы программирования в операционной системе Linux. Рассмотрены: использование библиотек C/C++ и стан­дартных средств разработки, организация системных вызовов, файловый ввод/вывод, взаимодействие процессов, программирование средствами командной оболочки, создание графических пользовательских интерфейсов с помощью инструментальных средств GTK+ или Qt, применение сокетов и др. Описана компиляция программ, их компоновка c библиотеками и работа с терминальным вводом/выводом. Даны приемы написания приложений в средах GNOME® и KDE®, хранения данных с использованием СУБД MySQL® и отладки программ. Книга хорошо структурирована, что делает обучение легким и быстрым. Для начинающих Linux-программистов

Нейл Мэтью , Ричард Стоунс , Татьяна Коротяева

ОС и Сети / Программирование / Книги по IT
Программист-прагматик. Путь от подмастерья к мастеру
Программист-прагматик. Путь от подмастерья к мастеру

Находясь на переднем крае программирования, книга "Программист-прагматик. Путь от подмастерья к мастеру" абстрагируется от всевозрастающей специализации и технических тонкостей разработки программ на современном уровне, чтобы исследовать суть процесса – требования к работоспособной и поддерживаемой программе, приводящей пользователей в восторг. Книга охватывает различные темы – от личной ответственности и карьерного роста до архитектурных методик, придающих программам гибкость и простоту в адаптации и повторном использовании.Прочитав эту книгу, вы научитесь:Бороться с недостатками программного обеспечения;Избегать ловушек, связанных с дублированием знания;Создавать гибкие, динамичные и адаптируемые программы;Избегать программирования в расчете на совпадение;Защищать вашу программу при помощи контрактов, утверждений и исключений;Собирать реальные требования;Осуществлять безжалостное и эффективное тестирование;Приводить в восторг ваших пользователей;Формировать команды из программистов-прагматиков и с помощью автоматизации делать ваши разработки более точными.

А. Алексашин , Дэвид Томас , Эндрю Хант

Программирование / Книги по IT
97 этюдов для архитекторов программных систем
97 этюдов для архитекторов программных систем

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

Билл де Ора , Майкл Хайгард , Нил Форд

Программирование, программы, базы данных / Базы данных / Программирование / Книги по IT