Linux程序,请编写程序,利用消息队列实现两个进程间的循环通信。要求: (1)发送的消息内容及消息类型从键盘上获得。 (2)将接收到的消息类型、消息内容,及消息的大小输出到屏幕上
时间: 2023-02-05 09:41:03 浏览: 152
进程间通信
在 Linux 中,可以使用消息队列来在两个进程间进行循环通信。这里是一个简单的例子,它实现了这些要求:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#define MAX_MSG_LEN 256
// 消息结构体,包含消息类型和消息内容
struct message {
long type;
char text[MAX_MSG_LEN];
};
int main()
{
// 创建消息队列
key_t key = ftok("/tmp", 'a');
int msgid = msgget(key, 0666 | IPC_CREAT);
if (msgid < 0) {
perror("msgget error");
exit(1);
}
while (1) {
// 从键盘输入消息类型和消息内容
printf("Enter message type: ");
long type;
scanf("%ld", &type);
printf("Enter message text: ");
char text[MAX_MSG_LEN];
scanf("%s", text);
// 构造消息并发送
struct message msg;
msg.type = type;
strcpy(msg.text, text);
msgsnd(msgid, &msg, sizeof(struct message) - sizeof(long), 0);
// 接收消息并输出
msgrcv(msgid, &msg, sizeof(struct message) - sizeof(long), type, 0);
printf("Received message type: %ld\n", msg.type);
printf("Received message text: %s\n", msg.text);
printf("Received message size: %ld\n", sizeof(msg));
}
return 0;
}
```
该程序首先创建了一个消息队列,然后在循环中不断地从键盘输入消息类型和消息内容,构造消息并发送到消息队列中。
阅读全文