unixXSIIPC-消息队列例程

系统运维

注意事项:

未央网站制作公司哪家好,找成都创新互联公司!从网页设计、网站建设、微信开发、APP开发、响应式网站设计等网站项目制作,到程序开发,运营维护。成都创新互联公司于2013年成立到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选成都创新互联公司

linux(2.4.22)限制:

可发送最长消息字节数为8192 队列容量字节数 16384 队列队列容量数 16

key_t ftok(char* path,int id)使用说明:

ftok创建一个键,是内核中的队列在外部的ID号,由于消息队列处于内核中,只有创建者和内核知道队列在内核里面的ID号,这样其它的进程就无法知道内核里面队列ID号,所以要关联一个外部键进行关联 id (1-255) 返回内核消息队列的ID号

其它的注意就查看一下unix高级环境编程吧,或者有些问题需要讨论就回我吧!!


server.c

#include"msg.h"#include#include#includeintmain(intargc,char**argv){intqueid=open_msg("/root",100);while(1){fputs("请输入要发送的类型:1or2\\n",stdout);inttype;scanf("%d",&type);switch(type){caseMYTYPE_ONE:{msg_send(queid,"MYTYPE_ONE",MYTYPE_ONE);break;}caseMYTYPE_TWO:{msg_send(queid,"MYTYPE_TWO",MYTYPE_TWO);break;}default:{fputs("输入类型错误,请重新输入\\n",stdout);break;}}fputs("输入:q为退出,其它表示继续\\n",stdout);if(getchar()==\'q\'){fputs("退出成功!\\n",stdout);break;}else{fputs("继续发送消息\\n",stdout);}}//不发送退出需要奖队列移除del_que(queid);return0;}



client.c

#include"msg.h"#include#include#includeintmain(intargc,char**argv){intqueid=open_msg("/root",100);while(1){fputs("请接收要发送的类型:1or2\\n",stdout);inttype;scanf("%d",&type);switch(type){caseMYTYPE_ONE:{msg_rec(queid,MYTYPE_ONE);break;}caseMYTYPE_TWO:{msg_rec(queid,MYTYPE_TWO);break;}default:{fputs("输入类型错误,请重新输入\\n",stdout);break;}}fputs("输入:q为退出,其它表示继续\\n",stdout);if(getchar()==\'q\'){fputs("退出成功!\\n",stdout);break;}else{fputs("继续发送消息\\n",stdout);}}//队列移除del_que(queid);return0;}




msg.c


#include#include#include#include#include#include#include#include"msg.h"//如果存在队列则打开,没有则创建intopen_msg(char*path,intid){//获取IPC对象的一个键key_tkey=ftok(path,id);if(-1==key){perror("ftok\\n");exit(1);}//创建一个队列intqueid=msgget(key,IPC_CREAT|0666);if(-1==queid){perror("msgget\\n");exit(1);}returnqueid;}//发送消息到队列voidmsg_send(key_tkey,char*text,longmsgtype){//初始化内容structMSGtmp;memset(&tmp,sizeof(structMSG),0);tmp.mytype=msgtype;strcpy(tmp.mytext,text);//发送消息if(msgsnd(key,&tmp,TEXTSIZE,0)){perror("msgsnd\\n");exit(1);}}//从消息队列获取消息并显示voidmsg_rec(key_tkey,longmsgtype){structMSGtmp;if(-1==msgrcv(key,&tmp,TEXTSIZE,msgtype,MSG_NOERROR)){perror("msgrcv\\n");exit(1);}printf("receivecontent:%s\\n",tmp.mytext);}//删除队列,即使队列里面还有消息也一起删除voiddel_que(key_tkey){if(msgctl(key,IPC_RMID,NULL)){perror("msgsnd\\n");exit(1);}}



msg.h


#ifndefMSG_H#defineMSG_H#include#defineTEXTSIZE100#defineARRYSIZE2#defineMYTYPE_ONE1#defineMYTYPE_TWO2structMSG{longmytype;charmytext[TEXTSIZE];};intopen_msg(char*,int);voidmsg_send(key_t,char*,long);#endif//endMSG_H

附件:http://down.51cto.com/data/2362206
网站标题:unixXSIIPC-消息队列例程
标题URL:http://pwwzsj.com/article/chojhd.html