Изменение mq_flags
28-31 Единственный атрибут, который можно менять с помощью нашей функции, — mq_flags, хранящийся в структуре mq_infо.
Листинг 6.6. Считывание из очереди сообщений System V с известным идентификатором
//svmsg/msgrcvid.c
1 #include "unpipc.h"
2 #define MAXMSG (8192 + sizeof(long))
3 int
4 main(int argc, char **argv)
5 {
6 int mqid;
7 ssize_t n;
8 struct msgbuf *buff;
9 if (argc != 2)
10 err_quit("usage: msgrcvid
11 mqid = atoi(argv[1]);
12 buff = Maloc(MAXMSG);
13 n = Msgrcv(mqid, buff, MAXMSG, 0, 0);
14 printf("read %d bytes, type = %ld\n", n, buff->mtype);
15 exit(0);
16 }
Вот пример использования этой программы:
solaris % touch /tmp/testid
solaris % msgcreate /tmp/testid
solaris % msgsnd /tmp/testid4 400
solaris % ipcs –qo
IPC status from
T ID KEY MODE OWNER GROUP CBYTES QNUM
Message Queues:
q 150 0x0000118a –rw-r--r-- rstevens other1 4 1
solaris % msgrcvid 150
read 4 bytes, type = 400
Идентификатор очереди (150) мы узнали с помощью ipcs, его мы и предоставляем программе msgrcvid в качестве аргумента командной строки.
Этот же метод можно использовать для семафоров System V (упражнение 11.1) и разделяемой памяти System V (упражнение 14.1).