系統(tǒng)運維
注意事項:
linux(2.4.22)限制:
可發(fā)送最長消息字節(jié)數(shù)為8192 隊列容量字節(jié)數(shù) 16384 隊列隊列容量數(shù) 16key_t ftok(char* path,int id)使用說明:
其它的注意就查看一下unix高級環(huán)境編程吧,或者有些問題需要討論就回我吧!!
server.c
#include"msg.h"#include#include #include intmain(intargc,char**argv){intqueid=open_msg("/root",100);while(1){fputs("請輸入要發(fā)送的類型: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為退出,其它表示繼續(xù)\\n",stdout);if(getchar()==\'q\'){fputs("退出成功!\\n",stdout);break;}else{fputs("繼續(xù)發(fā)送消息\\n",stdout);}}//不發(fā)送退出需要獎隊列移除del_que(queid);return0;}
client.c
#include"msg.h"#include#include #include intmain(intargc,char**argv){intqueid=open_msg("/root",100);while(1){fputs("請接收要發(fā)送的類型: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為退出,其它表示繼續(xù)\\n",stdout);if(getchar()==\'q\'){fputs("退出成功!\\n",stdout);break;}else{fputs("繼續(xù)發(fā)送消息\\n",stdout);}}//隊列移除del_que(queid);return0;}
msg.c
#include#include #include #include #include #include #include #include"msg.h"http://如果存在隊列則打開,沒有則創(chuàng)建intopen_msg(char*path,intid){//獲取IPC對象的一個鍵key_tkey=ftok(path,id);if(-1==key){perror("ftok\\n");exit(1);}//創(chuàng)建一個隊列intqueid=msgget(key,IPC_CREAT|0666);if(-1==queid){perror("msgget\\n");exit(1);}returnqueid;}//發(fā)送消息到隊列voidmsg_send(key_tkey,char*text,longmsgtype){//初始化內(nèi)容structMSGtmp;memset(&tmp,sizeof(structMSG),0);tmp.mytype=msgtype;strcpy(tmp.mytext,text);//發(fā)送消息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附件:http://down.51cto.com/data/2362206#defineTEXTSIZE100#defineARRYSIZE2#defineMYTYPE_ONE1#defineMYTYPE_TWO2structMSG{longmytype;charmytext[TEXTSIZE];};intopen_msg(char*,int);voidmsg_send(key_t,char*,long);#endif//endMSG_H