感谢支持
我们一直在努力

Linux消息队列

所谓消息队列就是指一个消息链表。


int msgget(key_t, int flag):创建和打开队列


int msgsnd(int msqid, struct msgbuf *msgp, size_t msgsz, int flag):发送消息,msgid是消息队列的id,msgp是消息内容所在的缓冲区,msgsz是消息的大小,msgflg是标志。


int msgrcv(int msqid, struct msgbuf *msgp, size_t msgsz, long msgtyp, int flag):接受消息,msgtyp是期望接收的消息类型。


int msgctl(int msqid, int cmd, struct msqid_ds *buf):控制



  1. #include <sys/types.h>   

  2. #include <sys/ipc.h>   

  3. #include <sys/msg.h>   

  4. #include <stdio.h>   

  5. #include <stdlib.h>   

  6. #include <unistd.h>   

  7. #include <string.h>   

  8. #define BUFSZ 512   

  9. struct message{          //消息结构体   

  10.     long msg_type;  

  11.     char msg_text[BUFSZ];  

  12. };  

  13.   

  14. int main()  

  15. {  

  16.     int qid;  

  17.     key_t key;  

  18.     int len;  

  19.     struct message msg;  

  20.   

  21.     if((key=ftok(“.”,‘a’))==-1)        //ftok获得一个key   

  22.     {  

  23.         perror(“ftok”);  

  24.         exit(1);  

  25.     }  

  26.     if((qid=msgget(key,IPC_CREAT|0666))==-1){    //创建一个消息队列   

  27.         perror(“msgget”);  

  28.         exit(1);  

  29.     }  

  30.     printf(“opened queue %d\n”,qid);  

  31.     puts(“Please enter the message to queue:”);  

  32.     if((fgets(msg.msg_text,BUFSZ,stdin))==NULL)     // 从标准输入获取输入   

  33.     {  

  34.         puts(“no message”);  

  35.         exit(1);  

  36.     }  

  37.     msg.msg_type = getpid();       

  38.     len = strlen(msg.msg_text);  

  39.     if((msgsnd(qid,&msg,len,0))<0){                 //发送消息   

  40.         perror(“message posted”);  

  41.         exit(1);  

  42.     }  

  43.     if(msgrcv(qid,&msg,BUFSZ,0,0)<0){               //接收消息   

  44.         perror(“msgrcv”);  

  45.         exit(1);  

  46.     }  

  47.     printf(“message is:%s\n”,(&msg)->msg_text);  

  48.     if((msgctl(qid,IPC_RMID,NULL))<0){              //删除消息   

  49.         perror(“msgctl”);  

  50.         exit(1);  

  51.     }  

  52.     exit(0);  

  53. }  

赞(0) 打赏
转载请注明出处:服务器评测 » Linux消息队列
分享到: 更多 (0)

听说打赏我的人,都进福布斯排行榜啦!

支付宝扫一扫打赏

微信扫一扫打赏