我使用msgrcv函数从消息队列中读取消息。当我读取已知长度的数据时,它工作得很好。某些情况下,我的消息长度是可变的。在这种情况下,我如何才能只分配所需的内存量并从消息队列中读取消息,而不会丢失消息队列中的任何数据。请给出解决这个问题的想法。
注意:在IBM消息队列中,当我们读取超长数据时,它会将消息的实际大小填充到我们传递的mqget函数的结构中。像这样,有没有办法在消息队列中完成这个操作。
发布于 2012-05-22 20:51:05
根据我对msgrcv()手册页的简要阅读,如果您的缓冲区太小并且没有指定MSG_NOERROR标志,msgrcv()将返回-1 (将errno设置为E2BIG)并将消息留在队列中。
在这种情况下,您可以将缓冲区大小加倍(最高可达MSGMAX,在linux上默认为8192 ),然后重试。
https://stackoverflow.com/questions/10702096
复制相似问题