使用linux msg编写多个编程通信
时间: 2023-05-25 07:03:19 浏览: 95
详解Linux多线程使用信号量同步
示例代码如下:
程序1 - 发送消息
```
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <stdio.h>
#include <string.h>
#define MSG_LEN 512
typedef struct {
long mtype;
char mtext[MSG_LEN];
} msg_t;
int main() {
key_t key = ftok(".", 'a'); // 获取消息队列的key
int msgid = msgget(key, IPC_CREAT|0666); // 创建或打开消息队列
msg_t msg;
msg.mtype = 1; // 消息类型为1
sprintf(msg.mtext, "Hello, this is program1!"); // 消息内容
msgsnd(msgid, &msg, strlen(msg.mtext)+1, 0); // 发送消息
printf("Program1 has sent message: %s\n", msg.mtext);
return 0;
}
```
程序2 - 接收消息
```
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <stdio.h>
#include <string.h>
#define MSG_LEN 512
typedef struct {
long mtype;
char mtext[MSG_LEN];
} msg_t;
int main() {
key_t key = ftok(".", 'a'); // 获取消息队列的key
int msgid = msgget(key, IPC_CREAT|0666); // 创建或打开消息队列
msg_t msg;
msgrcv(msgid, &msg, MSG_LEN, 1, 0); // 接收消息类型为1的消息
printf("Program2 has received message: %s\n", msg.mtext);
return 0;
}
```
启动程序1后,再启动程序2,程序2会接收到程序1发送的消息。这样,通过消息队列通信,两个程序之间就完成了数据传递。可以在程序中自定义消息格式和类型,实现复杂的通信功能。
阅读全文