我正在尝试接收一系列消息,我在msgsnd的一系列fork()中发送了这些消息。我可以告诉发送的消息没问题,但接收它们一直是个问题。这是代码的问题部分,以三条消息为例:
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,这是无效参数。
更新(使用声明):
struct u_msgbuf
{
long mtype;
char word[15];
};
struct u_msgbuf rec;