私はUnixの管理者からのインタビューの質問を見ている間、「Named Pipes」というトピックを見つけました。
私はこのトピックをある程度理解できました。名前付きパイプ||FIFO
しかし、まだこの特定のタイプのパイプをいつ使用するかについての知識が不足しているようです。名前のないパイプが機能しない特別なケースはありますか?
ベストアンサー1
名前付きパイプには、私が考えることができる4つまたは3つの利点があります。
- 読み取り/書き込みプロセスを同時に開始する必要はありません。
- 複数のリーダー/ライターを持つことができます。共通の祖先は必要ありません
- ファイルとして所有権と権限を制御できます。
双方向の名前のないパイプです。可能一方向です**)
|
一方向標準シェルパイプを考慮すると、複数のシェル(ksh
、、zsh
およびbash
)も提供されます。共同プロセス双方向通信を許可します。 POSIXはパイプを半二重(つまり、各端は読み取りまたは書き込みのみ可能)として処理し、システムコールは2つのpipe()
ファイルハンドルを返します。一方のファイルハンドルは読み取り専用で、もう一方のハンドルは書き込み専用として処理できます。 。一部の(BSD)システムは同時読み取りおよび書き込みをサポートしますが(POSIXはこれを禁止しません)、他のシステムでは各方向に1つずつ2つのパイプが必要です。pipe()
あなたのpopen()
マニュアルページを確認してくださいpopen2()
。指向性はパイプ名が指定されているかどうかに依存しないかもしれませんが、Linux 2.6ではそうです。
(更新しました。フィードバックありがとうございます。スティーブン・チャジェラス)
したがって、名前のないパイプを使用して達成できない確かな作業の1つは、既存のクライアント/サーバーアプリケーションです。
一方向パイプの上記の最後の(ヒット)ポイントは、Linux、POSIXに関連しています(参照:popen()
)はパイプだけでよいという意味です。読めるまたは書き込み可能、存在するLinuxは一方向です。バラよりLinuxカーネルについて学ぶ(第3版、O'Reilly)Linuxに関する詳細を学びます(p787)。他のオペレーティングシステムは双方向(名前なし)パイプを提供します。
たとえば、Nagiosはfifoコマンドファイル。さまざまな外部プロセス(CGIスクリプト、外部チェック、NRPEなど)は、このfifoにコマンド/アップデートを作成し、これは継続的なNagiosプロセスによって処理されます。
名前付きパイプ機能はTCP接続と変わりませんが、重要な違いがあります。 fifoには永続的なファイルシステム名があるため、リーダーがなくても書くことができます。書き込みはブロックされますが(非同期または非ブロックI / Oなし)受信者が存在しない場合はブロックされません。その後、データは失われます。起動(または再起動)。
参考までに以下もご覧ください。Unixドメインソケットと答えこのStackoverflowの質問主な内容をまとめたものです産業用コンピュータ方法とこれについて話すpopen()