0

名前付きパイプを使用して他のプロセスと通信する小さな Linux プログラムに、ハンドシェイク タイプのプロトコルを実装する必要があります。名前付きパイプを使用する場合のハンドシェイク型プロトコルの一般的な実装パターンを検索しましたが、何も上げることができませんでした...

これを行うパターンがないとは信じられません。誰かが可能なリソースを教えてくれますか?

完全な開示では、これは宿題ですが、このパターンを実装することは宿題ではありません。宿題コード内の問題を解決する必要があり、これが可能な解決策であると信じています。宿題は C++ で実装されていますが、言語は私には関係ありません。私は車輪を再発明したくないだけです....

更新:これは信号で実装される可能性があると感じています。

ハンドシェイクとは、子プロセスが親プロセスに、作業の準備ができていることを報告しますが、親が go シグナルを出すまで (パイプに何かがあったとしても) 先に進まないことです。私の作業理論では、多くの子プロセスが準備完了を報告し、親プロセスからの go シグナルを待つ必要があります。

4

1 に答える 1

2

通常の使用法では、プロセスはハンドシェイクのブロックに依存しています。ライター プロセスはパイプを書き込み用に開き、リーダー プロセスはパイプを読み取り用に開きます。最初に発生した方が、他のプロセスがパイプを開くまでブロックされます。これは、リーダー側でノンブロッキング IO を使用するように拡張できます。

名前付きパイプは、1 対 1 の IPC に最も役立ちます。1 対多の状況では、代わりに UNIX ドメイン ソケットを使用する必要があります。

于 2009-08-03T03:29:03.477 に答える