Я пытаюсь передать структуру из нескольких дочерних процессов обратно родительскому. КонструкцияОшибка структуры трубопроводов
typedef struct node* Node;
struct node{
char *str;
int num;
struct node* next;
};
настроен как. Когда я читаю/пишу с помощью трубы и пытаюсь распечатать поля структуры, он говорит, что моя переменная запрашивает что-то из структуры, но не является структурой.
wordc-mp-main.c:123:44: error: request for member ‘num’ in something not a structure or union
printf("%s, count %d\n", taken->str, taken->num);
^
Вот код трубы от процессов ребенка:
close(fd[0]);
fclose(inputFile);
Node* pass = wordList->head;
write(fd[1], pass, sizeof(Node));
Вот код из Родитель:
close(fd[1]);
Node* taken;
read(fd[0], taken, sizeof(Node));
printf("%s, count %d\n", taken->str, taken->num);
Пожалуйста, помогите и спасибо.
обновления: убрано * из узлов и сделали один
Node taken = (Node) malloc(sizeof(Node));
Я не получаю ошибки сегментации, но моя структура не проходит через трубу правильно.
И вот почему вы не скрываете свою косвенность через 'typedef's. – EOF
Обратите внимание, что структура, содержащая 2 указателя, не является хорошим кандидатом для отправки между процессами. Указатель в процессе отправки, как правило, недействителен в процессе приема; вы не передали данные, на которые указывают указатели. Вероятно, это приведет к сбоям, если вы столкнулись с проблемами компиляции. –
См. [Это хорошая идея для указателей typedef] (http://stackoverflow.com/questions/750178/is-it-a-good-idea-to-typedef-pointers) для подробного обсуждения @ EOF's точка. –