Получение сообщений SysV с помощью fork()

Я пытаюсь получить серию сообщений, которые я отправил с помощью 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() получал сообщения правильно?

Редактировать: Что я получаю, так это: первый форк для обработки работает нормально, второй редко делает, третий всегда терпит неудачу. Значение ошибки устанавливается равным 22, что является неверным аргументом.


Обновление (используемые объявления):

struct u_msgbuf
{
  long mtype;
  char word[15];
};

struct u_msgbuf rec; 

0 ответов

Другие вопросы по тегам