linux进程间利用消息队列进行通信实例代码
时间: 2023-03-21 16:01:52 浏览: 117
以下是一个简单的示例代码,展示了如何在Linux进程之间使用消息队列进行通信。
发送方进程:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/msg.h>
#define MSG_SIZE 256
struct msg_buffer {
long msg_type;
char msg_text[MSG_SIZE];
};
int main() {
key_t key;
int msg_id;
struct msg_buffer message;
// 创建一个唯一的key
key = ftok("msgq.txt", 'A');
// 创建消息队列
msg_id = msgget(key, 0666 | IPC_CREAT);
// 设置消息类型
message.msg_type = 1;
// 设置消息内容
strcpy(message.msg_text, "Hello from sender!");
// 发送消息
msgsnd(msg_id, &message, sizeof(message), 0);
printf("Message sent: %s\n", message.msg_text);
return 0;
}
```
接收方进程:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/msg.h>
#define MSG_SIZE 256
struct msg_buffer {
long msg_type;
char msg_text[MSG_SIZE];
};
int main() {
key_t key;
int msg_id;
struct msg_buffer message;
// 创建一个唯一的key
key = ftok("msgq.txt", 'A');
// 获取消息队列
msg_id = msgget(key, 0666 | IPC_CREAT);
// 接收消息
msgrcv(msg_id, &message, sizeof(message), 1, 0);
printf("Message received: %s\n", message.msg_text);
// 删除消息队列
msgctl(msg_id, IPC_RMID, NULL);
return 0;
}
```
这两个进程可以在同一台计算机上运行,也可以在不同的计算机上运行。在发送方进程中,首先创建一个唯一的key,然后使用该key创建一个新的消息队列。接下来,设置消息类型为1,将消息内容设置为“Hello from sender!”,并将消息发送到消息队列中。
在接收方进程中,使用与发送方进程相同的key获取消息队列。然后使用msgrcv函数接收消息,并将消息类型设置为1,这与发送方进程中设置的消息类型相同。最后,打印接收到的消息,然后使用msgctl函数删除消息队列。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.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)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)