2011-07-04 8 views
0

これは明白な質問かもしれないが、私はちょうどあなたに頼むことで確信したいと思う。パイプを使ったプロセス間通信

パイプシステムコールを使用して親子プロセス通信を使用して、名前のないパイプを作成しています。

私の子プロセスは、いくつかの情報を収集して親に送信する必要があります。私の質問は以下の通りです:

  1. 書き込みと読み取りの機能を使って文字列を送受信することはできますか?私は構造を送ることを忘れる必要があります。
  2. 私の前の質問に対する回答が「はい」の場合、親プロセスにすべての情報を転送する正しい方法は、関数を数回書くと読み込むことです。

ありがとうございました!

+0

ありがとう、それをする方法を見に行くよ! –

+0

私は "父のプロセス"を "親プロセス"に変更しました。これは政治的に正しいだけでなく、専門用語です。 – aib

答えて

2

write()read()structでも問題ありません。 へのポインタをbufパラメータとして使用します。これは、問題に遭遇した同じマシン上で実行されていないプロセス間でこれを実行したいときや、値がすべての場所で同じように理解されるようにポータブル表現に整列化/非整列化を行う必要があるときです。これには、パイプに実際にパケットの概念がないため、データ "パケット"の開始と終了を認識することが含まれます。つまり、一連の同一のメッセージをstructに書き込む場合は、write()とリーダーシリーズの終わりを示すために0を返すread()に依存することができます。他の情報も送信する必要がある場合は、 "それに続くものは何であるか"というフレーミングプロトコルが必要です。

+5

また、他のコンテンツへの_pointers_を含む 'struct'sは、渡すのが難しいです - ポインタは、他のアドレス空間では何も意味しません。 – sarnold

+0

さて、リンクされたリストを渡すのは本当に意味をなさないでしょうか?他の方法を使用する方が良いですか? –

+0

唯一のポインタがリンクされたリストポインタであれば、それらを順番に 'write()'します(事実上、リンクリストの代わりに配列として)。レシーバ 'read()'は各要素を受け取り、それに対して新しいリストエントリを割り当て、それをビルドするリストにリンクします。 – geekosaur

関連する問題