消息队列概念
消息队列提供了一个从一个进程向另外一个进程发送一块数据的方法 每个数据块都被认为是有一个类型,接收者进程接收的数据块可以有不同的类型值 消息队列也有管道一样的不足,就是每个数据块的最大长度是有上限的,系统上全体队列的最大总长度也有一个上限
消息队列函数操作
创建一个消息队列,最后进行删除队列
#include<stdio.h>
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/msg.h>
int main(int argc,char *argv)
{
int msgid = msgget((key_t)1234,0);
if(msgid == -1)
{
msgid = msgget((key_t)1234,IPC_CREAT|0766);
}
printf("msgid = %d\n",msgid);
msgctl(msgid,IPC_RMID,NULL);
return 0;
}
消息队列的写和读
#include<stdio.h>
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/msg.h>
typedef struct data
{
long i_type;
char buf[1024];
}data_t;
int main(int argc,char *argv)
{
int msgid = msgget((key_t)1234,0);
if(msgid == -1)
{
msgid = msgget((key_t)1234,IPC_CREAT|0766);
}
printf("msgid = %d\n",msgid);
//发送消息队列
data_t data;
memset(&data,0,sizeof(data_t));
data.i_type = 1;
strcpy(data.buf,"helloworld");
int ret = msgsnd(msgid,(void *)&data,sizeof(data_t)-sizeof(long),0);
if(ret == 0)
{
printf("send succes\n");
}
//读取消息队列
data_t rdata;
memset(&rdata,0,sizeof(data_t));
int rsize = msgrcv(msgid,(void *)&rdata,sizeof(data_t)-sizeof(long),1,0);
printf("read datasize = %d, data = %s\n",rsize,rdata.buf);
msgctl(msgid,IPC_RMID,NULL);
return 0;
}
运行结果如下:

本文深入讲解了消息队列的基本概念,包括如何通过消息队列在不同进程间传递数据,以及消息队列的创建、写入和读取操作。通过具体的代码示例,展示了消息队列在实际应用中的实现方式。
4419

被折叠的 条评论
为什么被折叠?



