Книга: UNIX: взаимодействие процессов
Программа msgrcvid
Программа msgrcvid
Покажем теперь, что для получения доступа к очереди сообщений System V не обязательно вызывать msgget: все, что нужно, — это знать идентификатор очереди сообщений, который легко получить с помощью ipcs, и считать разрешения доступа для очереди. В листинге 6.6 приведен упрощенный вариант программы msgrcv из листинга 6.4.
Здесь мы уже не используем msgget. Вместо этого используется идентификатор очереди сообщений, являющийся обязательным аргументом командной строки.
Листинг 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 <mqid>");
11 mqid = atoi(argv[1]);
12 buff = Maloc(MAXMSG);
13 n = Msgrcv(mqid, buff, MAXMSG, 0, 0);
14 printf("read %d bytes, type = %ldn", 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 <running system> as of Wed Mar 25 09:48:28 1998
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).
- Программа msgcreate
- Программа msgsnd
- Программа msgrcv
- Программа msgrmid
- Программа «Тайный покупатель»
- Программа Victoria
- Подпрограмма обработки прерывания
- Магическая программа, или Беспорядок по расписанию
- Что делать, если вместо русских букв в программах – непонятные символы?
- Как называется программа, которая устанавливает Windows за 5 минут?
- Программа shmget
- Какая программа позволяет создавать документы формата PDF?