系统运维
注意事项:
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<stdio.h>#include<string.h>#include<stdlib.h>intmain(intargc,charargv){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<stdio.h>#include<string.h>#include<stdlib.h>intmain(intargc,charargv){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<sys/types.h>#include<sys/ipc.h>#include<stdio.h>#include<stdlib.h>#include<sys/ipc.h>#include<sys/msg.h>#include<string.h>#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<sys/types.h>#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
电脑中通过锁定磁盘结合虚拟磁盘来保护文件资料的方法建议使用博客进行网站推广的有效方法产品型号产品名订单号价格元放入购物车立即开通备注对不起php怎样获取两个数组中不同的值mac投屏到电视如何操作 苹果电脑怎么投屏到电视域名怎么升值事情是这样的这是一台高防详解4大网络营销的发展趋势