構造体を複数の子プロセスから親構造にパイプし直そうとしています。構造配管構造エラー
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);
助け、あなたに感謝してください。
更新:ノードから削除*と1
Node taken = (Node) malloc(sizeof(Node));
を作った私は、セグメンテーションフォールトを取得していないが、私の構造が正しくパイプを通過しませんでした。
そして、あなたはtypedef's 'を通して、あなたの間接を隠していない理由です。 – EOF
2つのポインタを含む構造体は、プロセス間で送信される良い候補ではないことに注意してください。送信プロセスのポインタは、一般的に受信プロセスでは無効です。ポインタが指しているデータは渡されていません。これはおそらく、コンパイルの問題を越えてしまえば、クラッシュを引き起こすでしょう。 –
@ EOFの詳細な議論については、['typedef'ポインタを使うのは良い考えですか?](http://stackoverflow.com/questions/750178/is-it-a-good-ide-to-typedef-pointers)ポイント。 –