先进先出,保证信息的有序性。
函数:msgget(搭配ftok)、msgsnd、msgrcv、msgctl
实现流程:
1、创建消息队列IPC对象 msgget
2、通信(内置函数:msgsnd、msgrcv)
3、删除消息队列IPC对象 msgctl
write.c
/*===============================================
*   文件名称:write.c
*   创 建 者:cxy     
*   创建日期:2024年02月07日
*   描    述:
================================================*/
#include <stdio.h>
#include <sys/ipc.h>
#include <sys/types.h>
#include <sys/msg.h>typedef struct msgbuf{   long type;       //区分通信的队列char data[100];  //通信内容
}MSG;int main(int argc, char *argv[])
{//1、创建消息队列IPC对象msgget//1.1 获取key值key_t key = ftok("/home",5);//1.2 创建消息队列IPC对象//获取消息队列ID号int msgid = msgget(key,IPC_CREAT|0664);//2、通信msgsndMSG msg_1 = {1,"hahaha"};    //队列1MSG msg_2 = {2,"heiheihei"}; //队列2MSG msg_3 = {3,"xixixi"};    //队列3MSG msg_4 = {1,"----hahaha----"};    //队列1msgsnd(msgid,&msg_1,sizeof(msg_1)-sizeof(long),0);   //通信内容大小、权限可读可写msgsnd(msgid,&msg_2,sizeof(msg_2)-sizeof(long),0);msgsnd(msgid,&msg_3,sizeof(msg_3)-sizeof(long),0);msgsnd(msgid,&msg_4,sizeof(msg_4)-sizeof(long),0);//3、删除消息队列IPC对象msgctlmsgctl(msgid,IPC_RMID,NULL);return 0;
} read.c
/*===============================================
*   文件名称:read.c
*   创 建 者:cxy     
*   创建日期:2024年02月07日
*   描    述:
================================================*/
#include <stdio.h>
#include <sys/ipc.h>
#include <sys/types.h>
#include <sys/msg.h>typedef struct msgbuf{   long type;       //区分通信的队列char data[100];  //通信内容
}MSG;int main(int argc, char *argv[])
{//1、创建消息队列IPC对象msgget//1.1 获取key值key_t key = ftok("/home",5);//1.2 创建消息队列IPC对象//获取消息队列ID号int msgid = msgget(key,IPC_CREAT|0664);//2、通信msgrcvMSG mymsg_1;MSG mymsg_2;MSG mymsg_3;MSG mymsg_4;msgrcv(msgid,&mymsg_1,sizeof(MSG)-sizeof(long),3,0);   //mymsg_1存储队列3信息msgrcv(msgid,&mymsg_2,sizeof(MSG)-sizeof(long),2,0);   //mymsg_2存储队列2信息msgrcv(msgid,&mymsg_3,sizeof(MSG)-sizeof(long),1,0);   //mymsg_3存储队列1信息msgrcv(msgid,&mymsg_4,sizeof(MSG)-sizeof(long),1,0);   //mymsg_4存储队列1信息printf("%s\n",mymsg_1.data);printf("%s\n",mymsg_2.data);//按照发送顺序打印队列1中信息printf("%s\n",mymsg_3.data);printf("%s\n",mymsg_4.data);//3、删除消息队列IPC对象msgctlmsgctl(msgid,IPC_RMID,NULL);return 0;
} 结果:队列1证明了消息的有序性
