Листинг 11.4. Программа semgetvalues
//svsem/semgetvalues.c
1 #include "unpipc.h"
2 int
3 main(int argc, char **argv)
4 {
5 int semid, nsems, i;
6 struct semid_ds seminfo;
7 unsigned short *ptr;
8 union semun arg;
9 if (argc != 2)
10 err_quit("usage: semgetvalues
11 /* получаем количество семафоров в наборе */
12 semid = Semget(Ftok(argv[1], 0), 0, 0);
13 arg.buf = &seminfo;
14 Semctl(semid, 0, IPC_STAT, arg);
15 nsems = arg.buf->sem_nsems;
16 /* выделяем память под имеющееся количество элементов */
17 ptr = Calloc(nsems, sizeof(unsigned short));
18 arg.array = ptr;
19 /* получаем и выводим значения семафоров */
20 Semctl(semid, 0, GETALL, arg);
21 for (i = 0; i < nsems; i++)
22 printf("semval[%d] = %d\n", i, ptr[i]);
23 exit(0);
24 }