私は名前付きパイプを介してデータを公開するプロセスを作成しており、複数の購読者がいると予想しています。新しい購読者がパイプを開こうとするたびに、プロセスが名前付きパイプを閉じるようにする方法はありますか?
明確にするために編集 放送モデルを使用しようとしています。
- 私は購読者が1人かN人かを区別しません。
- 購読者がいなくても心配です。誰も聞いていない場合は、システムの一部を終了します。
- データ処理には興味がありません。誰かが購読したら、完全なデータセットを取得できることを願っています。
- 加入者は以前のデータを受け取ってはいけません。パイプを開くと、新しいデータがストリームとして表示されます。
ベストアンサー1
まず、タイトルの質問は次のとおりです。
複数のプロセスで名前付きパイプを開くことはできますか?
答えは「はい」です。私の言葉は、同時に1人以上の読者と1人以上の著者がいるということです。
今実際の質問は次のとおりです。
新しい購読者がパイプを開こうとするたびに、プロセスが名前付きパイプを閉じるようにする方法はありますか?
「キックオフ」が何を意味するのかよくわかりませんが、一般的な答えは次のとおりです。
- 書き込み用にパイプを開くことは、他の人が読み取り用に開くまでブロック操作であり、リーダーなしでパイプに書き込むとSIGPIPEがトリガーされるため、作成者(発行者)は少なくとも1人のリーダー(購読者)があることを確認できます。
一方、作成者は、特定の時間に複数の読者がいるかどうかを知る方法はありません。以下を使用してFIFOアクティビティを監視すると、この問題を軽減できます。inotify
、しかし) - サイト運営者が送信したメッセージは、特定の読者を対象にできません。
- サイト運営者が作成したメッセージの内容は、読者間で重複しません。つまり、各読者は作成者から同じメッセージを受け取ります。代わりに、すべての読者がその一部を読みます。たとえば、3人の購読者(リーダー)を持つパイプに「HELLO WORLD」を書き込むと、最初の購読者は「HELL」を受け取り、2番目の購読者は「LORD」を受け取り、最後の購読者は「OW」を受け取ります。
[編集] これで、あなたの質問を明確にし、上記の内容がまだ適用されるので、名前付きパイプがあなたのニーズに合ったツールではないと結論付けることができます。ブロードキャスト/マルチキャストUDPソケットまたは専用メッセージングシステムが必要な場合があります。Dバス、AMQPブローカーなど