#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<signal.h>
#include<sys/ipc.h>
#include<sys/msg.h>
//用于装载消息的结构体
struct msgbuf{
long mtype;//消息类型
char mtext[1];//消息正文
};
//定义一个结构体
struct msgbuf msg;
//客户端发送消息
void client(){
//如果消息队列不存在则创建它
int msgqid = msgget(75,IPC_CREAT|0777);
msg.mtype = 1;
msg.mtext[0] = 'o';
msg.mtext[1] = 'k';
msgsnd(msgqid,&msg,2,0);
}
//接受消息的服务端
void service(){
int msgqid = msgget(75,0777);
do{
//msgrcv函数第5个参数为消息类型,就是msg结构体的mtype属性;
//第三个参数为消息的长度,就是结构体msg的mtext的长度。
int i = msgrcv(msgqid,&msg,2,0,1);
printf("%s\n",msg.mtext);
sleep(2);
}while(1);
}
int main(){
int pid;
//直到创建子进程为止
while((pid = fork()) == -1);
if(pid == 0){
//子进程发送消息
client();
}else{
sleep(1);
//父进程接受消息
service();
}
return 0;
}
在Linux环境中利用消息队列进行进程间的通信
最新推荐文章于 2023-01-25 10:49:56 发布
这个博客展示了如何在C语言中通过POSIX消息队列实现客户端和服务端之间的简单通信。客户端创建消息并发送'ok'到消息队列,而服务端则不断接收并打印接收到的消息。程序涉及的关键技术包括`msgget`、`msgsnd`、`msgrcv`等函数。
摘要由CSDN通过智能技术生成