0

我试图在一系列 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; 
4

0 回答 0