用Linux的msgget(), msgsend(), msgrev()和msgctl()函数写两个程序实现分别进行发送和接收消息
时间: 2024-05-10 15:14:52 浏览: 24
下面是一个简单的示例程序,其中一个程序使用msgsnd()函数发送消息,另一个程序使用msgrcv()函数接收消息。这两个程序使用msgget()和msgctl()函数创建和删除消息队列。
程序1:发送消息
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ipc.h>
#include <sys/msg.h>
struct msg_buffer {
long msg_type;
char msg[100];
} message;
int main() {
key_t key;
int msg_id;
key = ftok("msg_queue", 65); // 生成唯一的消息队列key
msg_id = msgget(key, 0666 | IPC_CREAT); // 创建消息队列并获取其id
message.msg_type = 1;
printf("Enter message: ");
fgets(message.msg, 100, stdin); // 从标准输入获取消息内容
msgsnd(msg_id, &message, sizeof(message), 0); // 发送消息
printf("Message sent: %s\n", message.msg);
msgctl(msg_id, IPC_RMID, NULL); // 删除消息队列
return 0;
}
```
程序2:接收消息
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ipc.h>
#include <sys/msg.h>
struct msg_buffer {
long msg_type;
char msg[100];
} message;
int main() {
key_t key;
int msg_id;
key = ftok("msg_queue", 65); // 使用同一key获取已存在的消息队列
msg_id = msgget(key, 0666 | IPC_CREAT); // 获取消息队列的id
msgrcv(msg_id, &message, sizeof(message), 1, 0); // 接收类型为1的消息
printf("Received message: %s\n", message.msg);
msgctl(msg_id, IPC_RMID, NULL); // 删除消息队列
return 0;
}
```
执行顺序:
1. 先编译并运行程序1,发送一条消息
2. 再编译并运行程序2,接收之前发送的消息
相关推荐
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![c](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)