複数のプロセスで名前付きパイプを開くことはできますか?

複数のプロセスで名前付きパイプを開くことはできますか?

私は名前付きパイプを介してデータを公開するプロセスを作成しており、複数の購読者がいると予想しています。新しい購読者がパイプを開こうとするたびに、プロセスが名前付きパイプを閉じるようにする方法はありますか?

明確にするために編集 放送モデルを使用しようとしています。

  • 私は購読者が1人かN人かを区別しません。
  • 購読者がいなくても心配です。誰も聞いていない場合は、システムの一部を終了します。
  • データ処理には興味がありません。誰かが購読したら、完全なデータセットを取得できることを願っています。
  • 加入者は以前のデータを受け取ってはいけません。パイプを開くと、新しいデータがストリームとして表示されます。

ベストアンサー1

まず、タイトルの質問は次のとおりです。

複数のプロセスで名前付きパイプを開くことはできますか?

答えは「はい」です。私の言葉は、同時に1人以上の読者と1人以上の著者がいるということです。

今実際の質問は次のとおりです。

新しい購読者がパイプを開こうとするたびに、プロセスが名前付きパイプを閉じるようにする方法はありますか?

「キックオフ」が何を意味するのかよくわかりませんが、一般的な答えは次のとおりです。

  • 書き込み用にパイプを開くことは、他の人が読み取り用に開くまでブロック操作であり、リーダーなしでパイプに書き込むとSIGPIPEがトリガーされるため、作成者(発行者)は少なくとも1人のリーダー(購読者)があることを確認できます。
    一方、作成者は、特定の時間に複数の読者がいるかどうかを知る方法はありません。以下を使用してFIFOアクティビティを監視すると、この問題を軽減できます。inotify、しかし)
  • サイト運営者が送信したメッセージは、特定の読者を対象にできません。
  • サイト運営者が作成したメッセージの内容は、読者間で重複しません。つまり、各読者は作成者から同じメッセージを受け取ります。代わりに、すべての読者がその一部を読みます。たとえば、3人の購読者(リーダー)を持つパイプに「HELLO WORLD」を書き込むと、最初の購読者は「HELL」を受け取り、2番目の購読者は「LORD」を受け取り、最後の購読者は「OW」を受け取ります。

[編集] これで、あなたの質問を明確にし、上記の内容がまだ適用されるので、名前付きパイプがあなたのニーズに合ったツールではないと結論付けることができます。ブロードキャスト/マルチキャストUDPソケットまたは専用メッセージングシステムが必要な場合があります。DバスAMQPブローカーなど

おすすめ記事