我试图在一系列 fork() 中接收我用 msgsnd 发送的一系列消息。我可以说发送的消息正常,但接收它们一直是个问题。这是代码的问题部分,以三个消息为例:
for(j=1;j<4;j++)
{
if(!(pid_A = fork()))
{
msgLen = msgrcv(msqid, &rec, sizeof(struct u_msgbuf) - sizeof(long), 0,0);
if(msgLen == -1)
{
printf("%i - %s.\n", j, strerror(errno));
exit(0);
}
else
{
printf("%i - %s.\n", j, rec.word);
exit(0);
}
}
}
如果我在没有 fork() 的情况下编写类似的代码,它工作正常,所以我知道 fork() 以我不理解的方式弄乱了我的消息队列。有人可以告诉我为什么这在 fork() 中不起作用,以及我如何以这样的方式编写代码以使我的 fork() 能够正确接收消息?
编辑:我得到的是:第一个 fork 处理运行良好,第二个很少,第三个总是失败。errno 设置为 22,即 Invalid Argument。
更新(使用的声明):
struct u_msgbuf
{
long mtype;
char word[15];
};
struct u_msgbuf rec;