Операционная система UNIX. Руководство программиста




Программа-пример - часть 2


1 /* Программа иллюстрирует 2 возможности системного вызова msgctl() 3 (управление очередями сообщений) */

4 #include <stdio.h> 5 #include <sys/types.h> 6 #include <sys/ipc.h> 7 #include <sys/msg.h>

8 main () 9 { 10 extern int errno; 11 int msqid, command, choice, rtrn; 12 struct msqid_ds msqid_ds, *buf; 13 buf = &msqid_ds;

14 /* Ввести идентификатор и действие */ 15 printf ("Введите идентификатор msqid: "); 16 scanf ("%d", &msqid);

17 printf ("Введите номер требуемого действия:\n"); 18 printf (" IPC_STAT = 1\n"); 19 printf (" IPC_SET = 2\n"); 20 printf (" IPC_RMID = 3\n"); 21 printf (" Выбор = "); 22 scanf ("%d", &command);

23 /* Проверить значения */ 24 printf ("идентификатор = %d, действие = %d\n", 25 msqid, command);

26 switch (command) { 27 case 1: /* Скопировать информацию 28 о состоянии очереди сообщений 29 в пользовательскую структуру 30 и вывести ее */ 31 rtrn = msgctl (msqid, IPC_STAT, buf); 32 printf ("\n Идентификатор пользователя = %d\n", 33 buf->msg_perm.uid); 34 printf ("\n Идентификатор группы = %d\n", 35 buf->msg_perm.gid); 36 printf ("\n Права на операции = 0%o\n", 37 buf->msg_perm.mode); 38 printf ("\n Размер очереди в байтах = %d\n", 39 buf->msg_qbytes); 40 break;

41 case 2: /* Выбрать и изменить поле (поля) 42 ассоциированной структуры данных */ 43 /* Сначала получить исходное значение 44 структуры данных */ 45 rtrn = msgctl (msqid, IPC_STAT, buf); 46 printf ("\nВведите номер поля, "); 47 printf ("которое нужно изменить:\n"); 48 printf (" msg_perm.uid = 1\n"); 49 printf (" msg_perm.gid = 2\n"); 50 printf (" msg_perm.mode = 3\n"); 51 printf (" msg_qbytes = 4\n"); 52 printf (" Выбор = "); 53 scanf ("%d", &choice);

54 switch (choice) { 55 case 1: 56 printf ("\nВведите ид-р пользователя: "); 57 scanf ("%d", &buf->msg_perm.uid); 58 printf ("\nИд-р пользователя = %d\n", 59 buf->msg_perm.uid); 60 break;




Содержание  Назад  Вперед