陈奇网络工作室

unixXSIIPC-消息队列例程

系统运输

注意事项:

Linux(2.4.22 )限制:

可发送的最大消息字节数为8192

队列的最大容量字节数16384

队列最大队列容量16

key_tFtok(char*path,int id )的使用说明:

ftok会创建一个密钥,其中内核中的队列是外部的ID号。 其他进程不知道内核中的队列ID号,因为消息队列位于内核中,只有作者和内核知道队列位于内核中的ID号。 因此,关联和关联外键

id(1-255 ) )。

返回内核消息队列的ID号

其他注意事项请看unix的高级环境编程。 或者,如果有几个问题需要讨论的话,请回到我这里。

server.c

#include& #039; msg.h& #039; # include stdio.h # include string.h # include stdlib.hint main ( int argc,char**argv ) intqueid while(1) {fputs inttype; scanf(& #039; %d& #039;type ); switch(type ) caseMYTYPE_ONE ) msg_send ) queid,& #039; MYTYPE_ONE& #039;mytype_one ); 黑; } case my type _ two:{ msg _ send ( queid,& #039; MYTYPE_TWO& #039;mytype_two ); 黑; }default:{fputs(& #039; 输入类型错误。 \\\\n )、stdout ),然后重新输入。 黑; }}fputs(& #039; 输入: q结束,其他继续\\\\n )、stdout ); if(getchar(==(\\&amp ); #039; q\\& #039; ) { fputs } & amp; #039; 结束成功了! \\\\n& #039;stdout; 黑; }else{fputs(& #039; 继续发送消息\\\\n& #039; stdout ); (//退出需要删除Del_que(queid )而不发送奖励队列; 返回0; }

client.c

#include& #039; msg.h& #039; # include stdio.h # include string.h # include stdlib.hint main ( int argc,char**argv ) intqueid while(1) {fputs inttype; scanf(& #039; %d& #039;type ); switch(type ) caseMYTYPE_ONE ) msg_rec ) queid,mytype_one ); 黑; }caseMYTYPE_TWO:{msg_rec(queid,mytype_two ); 黑; }default:{fputs(& #039; 输入类型错误。 \\\\n )、stdout ),然后重新输入。 黑; }}fputs(& #039; 输入: q结束,其他继续\\\\n )、stdout ); if(getchar(==(\\&amp ); #039; q\\& #039; ) { fputs } & amp; #039; 结束成功了! \\\\n& #039;stdout; 黑; }else{fputs(& #039; 继续发送消息\\\\n& #039; stdout ); //从队列中删除Del_que(queid ); 返回0; }

msg.c

# includesys/types.h # includesys/IPC.h # include stdio.h # include stdlib.h # includesys/IPC.h # includesys/mes 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; srcpy(tmp.mytext,text ); //发送消息if ( msgsnd ( key,tmp,TEXTSIZE,0 ) ) perror & amp; #039; msgsnd\\\n& #039; ); exit(1; }//从消息队列中检索消息,并使用voidmsg_rec(key_tkey,longmsgtype ) {structMSGtmp; if(-1==msgrcv(key,tmp,TEXTSIZE,msgtype,MSG_NOERROR ) ) perror ) msgrcv(\\n& #039; ); exit(1; } printf ( receive content:% s\\ n & amp; #039;tmp.mytext ); //删除队列,并一起使用voiddel_que(key_tkey ) if ) msgctl ) key,IPC_RMID,NULL ) ) perror ) msgnd ) }

msg.h

# ifndef msg _ h # definemsg _ h # includesys/types.h # define text size 100 # definearrysize2# define my type _ one1# define (; intopen_msg(char*,int ); voidmsg_send(key_t,char*,long ); #endif//endMSG_H

附件: http://down.51cto.com/data/2362206

详情请访问云服务器、域名注册、虚拟主机的问题,请访问西部数码代理商官方网站: www.chenqinet.cn

相关推荐

后台-系统设置-扩展变量-手机广告位-内容页底部广告位3