消息队列中消息大小

Zsen_J 2010-03-11 02:15:47
2个进程一个主进程,一个子进程;
主进程发送消息,子进程读取消息;

问题是:
主进程发送消息大小不定情况下,子进程如何获得消息大小?
...全文
316 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yzq025 2010-06-10
  • 打赏
  • 举报
回复
收时可以以默认最大值来收,msgrcv返回实际该消息的大小,只要不超过最大值就没问题,不影响队列里其他消息!
Zsen_J 2010-03-16
  • 打赏
  • 举报
回复
之前没在这个板块,移动到这里希望得到答案
pengxn 2010-03-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zsen_j 的回复:]
int msgrcv(int msqid,struct msgbug *msgp,size_t msgsz,long int msgtyp,int msgflg);

这个是函数定义,注意中间的参数 size_t msgsz.此参数是消息缓冲区大小,这个值的大小如何来定?
[/Quote]

楼主的意思是,想在接收以前就知道消息的大小是多少,便于开辟缓冲区来接受。

比如发送端送了4096字节,而只按1024接收的话,后续数据是会被截断,且被破坏无法获取的。

所以如果能够知道发送的时候,最大的长度是多少就好做了,接收端确实无法知道缓冲需要开辟,这个问题我也很困绕,项目开发中是采取其他方式实现的。

帮顶,关注
Zsen_J 2010-03-12
  • 打赏
  • 举报
回复
没人给个答案么
Zsen_J 2010-03-11
  • 打赏
  • 举报
回复
int msgrcv(int msqid,struct msgbug *msgp,size_t msgsz,long int msgtyp,int msgflg);

这个是函数定义,注意中间的参数 size_t msgsz.此参数是消息缓冲区大小,这个值的大小如何来定?
nextel 2010-03-11
  • 打赏
  • 举报
回复
msgrcv的返回值就是此次操作中所获得数据的长度。如果你的数据传输后拿不到长度,就需要自己在传输的结构中加长度信息。

23,116

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧