使用fork()接收SysV消息

时间:2013-08-07 23:50:21

标签: c fork message-queue sysv msgrcv

我正在尝试接收一系列消息,我在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; 

0 个答案:

没有答案