Linux 消息队列 有P1,P2,P3三个进程,P1和P2负责从键盘接收字符串,均发送给P3,P3根据接受到的消息,显示来自P1或P2
时间: 2024-04-29 10:21:42 浏览: 102
Linux进程间通信之消息队列
4星 · 用户满意度95%
可以使用Linux消息队列来实现这一功能。具体步骤如下:
1. 创建一个消息队列,用于进程间通信。
```c++
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
key_t key = ftok("msgq.txt", 'A');
int msgid = msgget(key, IPC_CREAT | 0666);
```
2. 在P1和P2进程中,从键盘接收字符串并将其发送到消息队列中。
```c++
struct msgbuf {
long mtype;
char mtext[1024];
};
msgbuf message;
message.mtype = 1; // P1和P2发送的消息类型都是1
fgets(message.mtext, 1024, stdin);
msgsnd(msgid, &message, sizeof(message.mtext), 0);
```
3. 在P3进程中,从消息队列中接收消息,并根据消息类型来判断是来自P1还是P2。
```c++
msgbuf message;
msgrcv(msgid, &message, sizeof(message.mtext), 1, 0); // 接收类型为1的消息
if (message.mtype == 1) {
printf("Message from P1: %s", message.mtext);
} else if (message.mtype == 2) {
printf("Message from P2: %s", message.mtext);
}
```
注意:在使用消息队列进行进程间通信时,需要保证消息的格式和类型的一致性,否则会导致程序出错。
阅读全文