系列目录
文章目录
头文件
#include
函数:
- int msgctl(int msqid,int cmd,struct msqid_ds *buf);
- int msgget(key_t key,int msgflg);
- int msgrcv(int msqid,void *msg_ptr,size_t msg_sz,long int msgtype,int msgflg);
- int msgsnd(int msqid,const void *msg_ptr,size_t msg_sz,int msgflg);
int msgget(key_t key,int msgflg);
int msgsnd(int msqid,const void *msg_ptr,size_t msg_sz,int msgflg);
- struct my_message{
- long int message_type;
- ...
- };
int msgrcv(int msqid,void *msg_ptr,size_t msg_sz,long int msgtype,int msgflg);
int msgctl(int msqid,int cmd,struct msqid_ds *buf);
- struct msqid_ds{
- uid_t msg_perm.uid;
- uid_t msg_perm.gid;
- mode_t msg_perm.mode;
- };
通过代码掌握消息队列是如何发送与接收消息
在消息队列中添加消息:
message.c:发送消息”hello1",该进程运行一次,就会有1个“hello1"被添加入消息队列中。
#include #include #include #include #include //定义消息 struct mess { long type; char data[128]; }; int main() { int msgid=msgget((key_t)1235,IPC_CREAT|0600);//添加一次,后面再使用就是获取消息 if(msgid==-1) { exit(0); } struct mess dt; dt.type=1; strcpy(dt.data,"hello1"); //1号消息内容hello1 msgsnd(msgid,(void*)&dt,128,0);//标志位0 //消息队列不用移除 }如下图所示,对message.c编译为mess,执行该文件1次,执行ipcs命令查看发现消息队列被添加一次
在消息队列中读取消息
编译message1.c读取消息队列中消息:
#include #include #include #include struct mess { long type; char data[128]; }; int main() { int msgid=msgget((key_t)1235,IPC_CREAT|0600); if(msgid==-1) { exit(0); } struct mess dt; msgrcv(msgid,(void*)&dt,128,1,0); printf("%s",dt.data); }如下图所示,对message1.c编译为mess1,执行该程序,发现a1写入的”hello1“被读取输出在屏幕上。