先进先出,保证信息的有序性。
函数: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、通信msgsnd
MSG msg_1 = {1,"hahaha"}; //队列1
MSG msg_2 = {2,"heiheihei"}; //队列2
MSG msg_3 = {3,"xixixi"}; //队列3
MSG msg_4 = {1,"----hahaha----"}; //队列1
msgsnd(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对象msgctl
msgctl(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、通信msgrcv
MSG 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对象msgctl
msgctl(msgid,IPC_RMID,NULL);
return 0;
}
结果:队列1证明了消息的有序性