Листинг 11.3. Программа semsetvalues
//svsem/semsetvalues.с
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: semsetvalues
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 if (argc != nsems + 2)
18 err_quit("%d semaphores in set, %d values specified", nsems, argc-2);
19 /* выделение памяти под значения семафоров набора, помещение этих значений в новый массив */
20 ptr = Calloc(nsems, sizeof(unsigned short));
21 arg.array = ptr;
22 for (i = 0; i < nsems; i++)
23 ptr[i] = atoi(argv[i +2]);
24 Semctl(semid, 0, SETALL, arg);
25 exit(0);
26 }