#include <stdio.h>
#include <wait.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <unistd.h>
#define SIZE 1024
const long id = 1000;//这里规定类型为1000的消息
typedef struct msgqueue{
long mytype;//消息类型
char mytext[SIZE];//消息内容
}msgqueue;
int main(){
key_t k = ftok(".",0x1234);//申请key,确保两个需要通信的进程使用同一个key值获取到的队列id
if(k < 0){
perror("ftok");
return -1;
}
int msgid = msgget(k,IPC_CREAT|IPC_EXCL|0666);//使用key值获取id
if(msgid < 0){
perror("msgget");
return -1;
}
pid_t pid = fork();
if(pid < 0){
perror("fork");
return -1;
}
if(pid > 0){//父进程发消息
msgqueue queue;
queue.mytype = id;//发送的消息类型为1000
char msg[SIZE];
while(1){//循环输入,此时输入的每一条消息,
Linux_父子进程通过消息队列通信
最新推荐文章于 2024-06-06 10:35:38 发布
该博客介绍了如何在Linux环境中,通过消息队列实现父子进程之间的通信。首先,通过ftok申请key,然后用msgget创建消息队列。父进程不断发送消息,子进程接收并处理消息,当接收到'end'时,双方结束通信。最后,使用msgctl删除消息队列。
摘要由CSDN通过智能技术生成