unixXSIIPC-消息队列例程-创新互联
注意事项:
成都创新互联是专业的祥云网站建设公司,祥云接单;提供成都网站建设、网站设计,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行祥云网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!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
- #include
- int main(int argc, char** argv)
- {
- int queid = open_msg("/root",100);
- while(1)
- {
- fputs("请输入要发送的类型:1 or 2\n", stdout);
- int type;
- scanf("%d",&type);
- switch(type)
- {
- case MYTYPE_ONE:
- {
- msg_send(queid,"MYTYPE_ONE", MYTYPE_ONE);
- break;
- }
- case MYTYPE_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);
- return 0;
- }
client.c
- #include "msg.h"
- #include
- #include
- #include
- int main(int argc, char** argv)
- {
- int queid = open_msg("/root",100);
- while(1)
- {
- fputs("请接收要发送的类型:1 or 2\n", stdout);
- int type;
- scanf("%d",&type);
- switch(type)
- {
- case MYTYPE_ONE:
- {
- msg_rec(queid,MYTYPE_ONE);
- break;
- }
- case MYTYPE_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);
- return 0;
- }
msg.c
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include"msg.h"
- //如果存在队列则打开,没有则创建
- int open_msg(char* path, int id)
- {
- //获取IPC对象的一个键
- key_t key = ftok(path, id);
- if(-1 == key)
- {
- perror("ftok\n");
- exit(1);
- }
- //创建一个队列
- int queid = msgget(key, IPC_CREAT|0666);
- if(-1 == queid)
- {
- perror("msgget\n");
- exit(1);
- }
- return queid;
- }
- //发送消息到队列
- void msg_send(key_t key,char* text, long msgtype)
- {
- //初始化内容
- struct MSG tmp;
- memset(&tmp,sizeof(struct MSG),0);
- tmp.mytype = msgtype;
- strcpy(tmp.mytext,text);
- //发送消息
- if(msgsnd(key, &tmp, TEXTSIZE, 0))
- {
- perror("msgsnd\n");
- exit(1);
- }
- }
- //从消息队列获取消息并显示
- void msg_rec(key_t key,long msgtype)
- {
- struct MSG tmp;
- if(-1 == msgrcv(key, &tmp, TEXTSIZE, msgtype, MSG_NOERROR))
- {
- perror("msgrcv\n");
- exit(1);
- }
- printf("receive content: %s\n",tmp.mytext);
- }
- //删除队列,即使队列里面还有消息也一起删除
- void del_que(key_t key)
- {
- if(msgctl(key,IPC_RMID,NULL))
- {
- perror("msgsnd\n");
- exit(1);
- }
- }
msg.h
附件:http://down.51cto.com/data/2362206
- #ifndef MSG_H
- #define MSG_H
- #include
- #define TEXTSIZE 100
- #define ARRYSIZE 2
- #define MYTYPE_ONE 1
- #define MYTYPE_TWO 2
- struct MSG
- {
- long mytype;
- char mytext[TEXTSIZE];
- };
- int open_msg(char*,int);
- void msg_send(key_t,char*,long);
- #endif // end MSG_H
另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
分享标题:unixXSIIPC-消息队列例程-创新互联
文章URL:http://scyanting.com/article/hpico.html