消息队列
前提:基于Linux系统的学习
消息队列
1 获取键值 ftok(3)
2 获取消息队列的id msgget(2)
3 向消息队列发送消息 msgsnd(2)
4 从消息队列获取消息 msgrcv(2)
//向消息队列中添加消息 #include <stdio.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> #include <string.h> typedef struct msgbuf{ long mtype; char mtext[128]; }msg_t; int main(){ msg_t msg; key_t key=ftok(".",23); //获取键值 if(key==-1){ perror("key"); return -1; } int msgid=msgget(key,IPC_CREAT|0644);//获取消息队列id if(msgid==-1){ perror("msgget"); return -1; } //初始化具体的消息队列 msg.mtype=3; strcpy(msg.mtext,"hector.."); //添加消息 int snd=msgsnd(msgid,&msg,strlen(msg.mtext),0); if(snd==-1){ perror("msgsnd"); return -1; } return 0; }
//从消息队列中取消息 #include <stdio.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> typedef struct msgbuf{ long mtype; char mtext[128]; }msg_t; int main(){ msg_t msg; key_t key=ftok(".",23); if(key==-1){ perror("ftok"); return -1; } int msgid=msgget(key,IPC_CREAT|0644); if(msgid==-1){ perror("msgget"); return -1; } ssize_t rcv=msgrcv(msgid,&msg,128,3,IPC_NOWAIT); if(rcv==-1){ perror("msgrcv"); return -1; } write(1,msg.mtext,rcv); return 0; }