全网营销推广运营培训学校,seo臻系统,海外网络搭建,英文版wordpress一、
消息队列#xff0c;是消息的链接表#xff0c;存放在内核中。一个消息队列有一个人标识符#xff08;及队列ID#xff09;来标识。
1、特点#xff1a; ①、消息队列是面向记录的#xff0c;其中的消息具有特定的格式以及待定的优先级。 ②、消息队列独立与发送与…一、
消息队列是消息的链接表存放在内核中。一个消息队列有一个人标识符及队列ID来标识。
1、特点 ①、消息队列是面向记录的其中的消息具有特定的格式以及待定的优先级。 ②、消息队列独立与发送与接收进程。进程终止时消息队列及其内容并不会被删除。 ③、消息队列可以实现消息的随机查询消息不一定要以先进先出的次序读取也可以按消息的类型读取。 2、原型
#include sys/msg.h
//创建或打开消息队列成功返回队列ID失败返回-1
int msgget(key_t key,int flag);
//key索引值flag打开队列的方式
//添加消息成功返回0失败返回-1
int msgsnd(int msqid,const void *ptr,size_t size,int flag);
//队列ID消息消息大小标志位。
//读取消息成功返回消息数据的长度失败返回-1
int msgrcv(int msqid, void *ptr,size_t size,long type,int flag);
//队列ID消息消息大小类型标志位。
//控制消息队列成功返回0失败返回-1
int msgctl(int msqid,int cmd,struct msqid_ds *buf);
//队列ID
//消息队列的移除以下两种情况下msgget将创建一个新的消息队列 ①、如果没有与键值key相对应的消息队列并且flag中包含了IPC_CREAT标志位 ②、key参数为IPC_PRIVATE。
函数msgrcv在读取消息队列时type参数有以下几种情况 ①、type 0返回队列中的第一个消息 ②、type 0返回队列中消息类型为type的第一个消息。 ③、type 0返回队列中消息类型值小于或等于type绝对值的消息如果有多个则取类型的最小值。
例 获取读
#include stdio.h
#include sys/types.h
#include sys/ipc.h
#include sys/msg.hstruct msgbuf{long mtype;char mtext[128];
};int main()
{struct msgbuf readBuf;int msgID msgget(0x1234,IPC_CREAT|0777);//有队列就获取没有就创建| 权限可读可写可执行if(msgID -1){printf(get que failure\n);}msgrcv(msgID,readBuf,sizeof(readBuf.mtext),888,0);//接收printf(read from que :%s\n,readBuf.mtext);return 0;
}发送
#include stdio.h
#include sys/types.h
#include sys/ipc.h
#include sys/msg.h
#include string.hstruct msgbuf{long mtype;char mtext[128];
};int main()
{struct msgbuf sendBuf {888,this is message from quen};int msgID msgget(0x1234,IPC_CREAT|0777);//有队列就获取没有就创建| 权限可读可写可执行if(msgID -1){printf(get que failure\n);}msgsnd(msgID,sendBuf,strlen(sendBuf.mtext),0);//发送数据return 0;
}单运行获取get时会发生阻塞需要运行发送send才可以继续运行
两个互相通信
#include stdio.h
#include sys/types.h
#include sys/ipc.h
#include sys/msg.h
#include string.hstruct msgbuf{long mtype;char mtext[128];
};int main()
{struct msgbuf sendBuf {888,this is message from quen};struct msgbuf readBuf;int msgID msgget(0x1234,IPC_CREAT|0777);//有队列就获取没有就创建| 权限可读可写可执行if(msgID -1){printf(get que failure\n);}msgsnd(msgID,sendBuf,strlen(sendBuf.mtext),0);//发送数据msgrcv(msgID,readBuf,sizeof(readBuf.mtext),988,0);//接收printf(reaturn from get :%s\n,readBuf.mtext);return 0;
}#include stdio.h
#include sys/types.h
#include sys/ipc.h
#include sys/msg.h
#include string.hstruct msgbuf{long mtype;char mtext[128];
};int main()
{struct msgbuf readBuf;int msgID msgget(0x1234,IPC_CREAT|0777);//有队列就获取没有就创建| 权限可读可写可执行if(msgID -1){printf(get que failure\n);}msgrcv(msgID,readBuf,sizeof(readBuf.mtext),888,0);//接收printf(read from que :%s\n,readBuf.mtext);struct msgbuf sendBuf {988,thank you for reach !};msgsnd(msgID,sendBuf,strlen(sendBuf.mtext),0);return 0;
}