5

当进程读取 IPC 消息时会发生什么msgrcv

为什么我不能mtype多次阅读相同的消息?

正在使用的结构的代码:

struct msgbuff{
    long mtype;
    char mtext[150];   
};
4

1 回答 1

2

一条消息只能阅读一次。这是 msgrcv 手册页描述其功能的方式:

msgrcv() 系统调用从 msqid 指定的队列中删除一条消息,并将其放在 msgp 指向的缓冲区中。

没有办法偷看队列。如果需要,可以使用 msgrcv() 从队列中弹出一个项目,然后使用 msgsnd() 再次添加它。存在失败的风险(队列已满、内存不足等),因此它不是万无一失的。

于 2013-01-14T16:12:38.347 回答