Получение сообщений 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;