匿名パイプ

ウィキペディアから、無料の百科事典
ナビゲーションにジャンプ 検索にジャンプ

コンピュータサイエンスでは無名パイプ一方向プロセス間通信(IPC)に使用できるシンプレックス FIFO通信チャネルです。多くの場合、実装はオペレーティングシステムのファイルIOサブシステムに統合されます。通常、親プログラムは無名パイプを開き、パイプのもう一方の端を継承する新しいプロセスを作成するか、いくつかの新しいプロセスを作成してパイプラインに配置します。

全二重(双方向)通信には通常、2つの無名パイプが必要です。

パイプラインは、 UnixおよびDOS以降の最も一般的なオペレーティングシステムでサポートされており|、多くのシェルで「」文字を使用して作成されています。

Unix

パイプラインは多くの従来のUnixアプリケーションの重要な部分であり、それらのサポートはほとんどのUnixライクなオペレーティングシステムにうまく統合されています。パイプは、pipe システムコールを使用して作成されます。このシステムコールは、新しいパイプを作成し、パイプの読み取りと書き込みの端を参照するファイル記述子のペアを返します。多くの従来のUnixプログラムは、パイプを操作するため のフィルターとして設計されています。

Microsoft Windows

Windows APIの他の多くのデバイスIOおよびIPC機能と同様に、無名パイプは、IO機能に固有のAPI関数を使用して作成および構成されます。この場合CreatePipe、パイプの読み取り端と書き込み端に別々のハンドルを持つ無名パイプを作成するために使用されます。パイプでの読み取りおよび書き込みIO操作は、標準のIO機能API関数ReadFileおよびを使用して実行されますWriteFile

Microsoft Windowsでは、無名パイプへの読み取りと書き込みは常にブロックされています。[1]つまり、空のパイプからの読み取りにより、呼び出し元のスレッドは、少なくとも1バイトが使用可能になるか、パイプの書き込みハンドルが閉じられた結果としてファイルの終わりが受信されるまで待機します。同様に、完全なパイプへの書き込みにより、呼び出し元のスレッドは、書き込まれるデータを格納するためのスペースが利用可能になるまで待機します。読み取りは、要求されたバイト数よりも少ない数で返される場合があります(短い読み取りとも呼ばれます)。

新しいプロセスは、作成プロセスで無名パイプへのハンドルを継承できます。

も参照してください

参考文献

  • ハート、ジョンソンM. Windowsシステムプログラミング、第3版。Addison-Wesley、2005。ISBN0-321-25619-0 
  • "pipe(7)-Linuxのマニュアルページ"2010年3月23日にオリジナルからアーカイブされました2010年2月27日取得

メモ

  1. ^ 「無名パイプ操作」MSDN 2010年2月27日取得非同期(重複)読み取りおよび書き込み操作は、無名パイプではサポートされていません。