免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1725 | 回复: 4
打印 上一主题 下一主题

[SCO UNIX] 在线急,各路Unix编程高手,消息队列中的消息类型的问题? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-08-11 21:49 |只看该作者 |倒序浏览
各路Unix编程高手:

          我在用消息队列作进程通信写程序时,多个客户端向服务器发起请求时,我用异步短联接,接收进程将请求包放在接收消息队列Q1中,处理进程从Q1中取出请求包,加工后,将处理结果放发送消息队列Q2中,我能成功地向Q1放消息,但却不能正确的取出,过程如下:
#define        MAX_MSG_LEN        2048        /* 最大消息队列长度*/
/*----------消息队列数据包定义--------------*/
typedef struct msg_rec
        {
        long mtype;
        char mtext[MAX_MSG_LEN];
        }MSG_DATA;
MSG_DATA   msgp, msgp1;

送Q1时用如下语句:
msgp.mtype=atoi(系统流水号);
bcopy( 接收到的(char *)data, msgp.mtext, data_len);
/*----发送,若消息队列满,则取出Q1的第一条-------*/
while( msgsnd(Q1msg_id,&msgp,data_len ,IPC_NOWAIT) )
         msgrcv(Q1msg_id,&tmsgp,MAX_MSG_LEN,0,IPC_NOWAIT);
在Q1取数据时用如下语句:
size = msgrcv( recv_msg_id, &msgp1, MAX_MSG_LEN, 0, 0))
  if (size <= 0 )   return -1;
此处我取不出数据啊,同志们,救救啊!!!
       主要原因我有如下密糊:
      1、送消息队列时要不要放消息类型?msgrcv()函数中的参数:数据长度是不是准确?
      2、我是从Q1的第一个消息中取的,有必要设消息类型吗?
      3、消息类型有何用处?是不是可用来区分多个客户端的请求包?
      4、以上方式我如何改进?


                                拜托网上各路英豪!!!
                                   在线等!!

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2003-08-11 21:50 |只看该作者

在线急,各路Unix编程高手,消息队列中的消息类型的问题?

开发的东西俺不是很熟,别的大虾来帮忙呀

论坛徽章:
0
3 [报告]
发表于 2003-08-11 22:26 |只看该作者

在线急,各路Unix编程高手,消息队列中的消息类型的问题?

出出力吧!!!

论坛徽章:
0
4 [报告]
发表于 2003-08-12 08:30 |只看该作者

在线急,各路Unix编程高手,消息队列中的消息类型的问题?

1、送消息队列时要不要放消息类型?要!
msgrcv()函数中的参数:数据长度是不是准确?不准确,请用最大值

2、我是从Q1的第一个消息中取的,有必要设消息类型吗?
根据你的需要,可设可不设

3、消息类型有何用处?是不是可用来区分多个客户端的请求包?
是的!

4、以上方式我如何改进?
送Q1时用如下语句:
while( msgsnd(Q1msg_id,&msgp,data_len ,IPC_NOWAIT) )
msgrcv(Q1msg_id,&tmsgp,MAX_MSG_LEN,0,IPC_NOWAIT);
这个语句作何用处?此处把队列都取光了,下面还能取吗?

论坛徽章:
0
5 [报告]
发表于 2003-08-12 23:43 |只看该作者

在线急,各路Unix编程高手,消息队列中的消息类型的问题?

谢谢你的回复,我已成功地解决了问题,你说的最后一个问题:
while( msgsnd(Q1msg_id,&msgp,data_len ,IPC_NOWAIT) )
msgrcv(Q1msg_id,&tmsgp,MAX_MSG_LEN,0,IPC_NOWAIT);

因为:msgsnd 返 回0 则 发 送 成 功。 返 回-1 则 表 示 发 送 失 败,用如上的while语句,主要用于不能向Q1存放消息(既Q1满了)时取为发送腾出空间,
  你的repeat让我在已经解决问题上更明一步!!
  thanks
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP