[<<Previous Entry]
[^^Up^^]
[Next Entry>>]
[Menu]
[About The Guide]
Пример сообщений - получатель
15-18 Сообщение представляет собой структуру. Первое поле в
структуре должно быть длинным целым. Остаток структуры
определяется пользователем.
22 Создает ключ на основе текущей рабочей директории. Как
msend, так и mrecv должны запускаться в одной и той же
рабочей директории.
31-36 Получать и распечатывать сообщения в цикле, пока не
получено good-bye.
37-38 Послать сообщение, состоящее только из типа (без
содержимого), обратно к msend. При получении этого
сообщения, msend удалит очередь и завершится.
Файл: mrecv.c
ПРИМЕР СООБЩЕНИЙ - ПОЛУЧАТЕЛЬ
1 #include <sys/types.h>
2 #include <unistd.h>
3 #include <string.h>
4 #include <stdio.h>
5 #include <stdlib.h>
6 #include <sys/ipc.h>
7 #include <sys/msg.h>
8 #define MAX_RCV_SZ60
9 static const long Fifo = 0L;
10 static const long Done = 99L;
11 static const int Zero_len = 0;
12
13 main()
14 {
15 struct msgbuf {
16 long mtype;
17 char mtext[MAX_RCV_SZ];
18 } buf;
19 key_t key;
20 int mid, rtn;
21
22 if((key = ftok(".", 'a')) == -1){
23 perror("Can't form key");
24 exit(1);
25 }
26 mid = msgget(key, 0);
27 if (mid == -1) {
28 perror("Receiver can't access msg queue");
29 exit(2);
30 }
31 while(1) {
32 rtn = msgrcv(mid,&buf,MAX_RCV_SZ,Fifo,0);
33 printf("rtn=%d buf.mtype=%ld buf.mtext=%s\n",
34 rtn, buf.mtype, buf.mtext);
35 if(!strcmp(buf.mtext,"good-bye"))break;
36 }
37 buf.mtype = Done;
38 msgsnd(mid, &buf, Zero_len, 0);
39 return(0);
40 }