名前付きパイプ 名前付きパイプの概要

名前付きパイプ

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2023/02/10 00:34 UTC 版)

Unix系

通常のシェルで使用する無名のパイプとは異なり、名前付きパイプはファイルシステムを使用する。mkfifo()[1] または mknod()[2] で明示的に作成し、2つのプロセスが名前を指定してそのパイプにアクセスでき、一方のプロセスは読み手としてオープンし、もう一方は書き手としてオープンする。名前付きパイプを作成する mkfifo というコマンドもある。

例えば、名前付きパイプを作成し、そのパイプに入力されたものを gzip で圧縮する場合、次のようにすればよい。

mkfifo my_pipe
gzip -9 -c < my_pipe > out.gz &

これとは全く独立に、パイプに圧縮すべきデータを送り込むことができる。

cat file > my_pipe

名前付きパイプは通常のファイルのように削除できる。

rm my_pipe

名前付きパイプはアプリケーションからアプリケーションへの情報転送を一時ファイルを作成することなく行える。例えば、gzip の伸長後の出力を次のように名前付きパイプにつなげる。

mkfifo --mode=0666 /tmp/namedPipe
gzip --stdout -d file.gz > /tmp/namedPipe

そして、伸長されたデータを次のように MySQL のテーブルにロードする[3]

LOAD DATA INFILE '/tmp/namedPipe' INTO TABLE tableName;

名前付きパイプがなければ、file.gz を伸長したものをいったん一時ファイルに格納しないと、MySQLにロードできない。一時ファイルに書き込むと、入出力がより多く発生して時間がかかり、ハードディスク上の空き領域も必要になる。

PostgreSQLのコマンドライン型フロントエンド psql も名前付きパイプからデータをロードする機能を備えている[4]

Windows

Windowsでは、名前付きパイプはクライアントサーバ型通信に基づいて設計されており、通常の読み書き操作以外にソケットのようにも働く。サーバアプリケーションのための明示的な「受動」モードを備えている。Windows 95 では名前付きパイプのクライアントをサポートしている。Windows NT 系OSではクライアントとサーバの両方をサポートしている。

名前付きパイプはファイルのようにアクセスでき、Win32 SDK の CreateFile(オープン)、ReadFile(リード)、WriteFile(ライト)、CloseHandle(クローズ)が使える。Unix系のようなコマンドラインインタフェースは存在しない。

Unix系とは異なり、通常のファイルシステム内に作成することはできない。また永続性もなく、オープンしていたものが全てクローズすると消滅する。全てのパイプは named pipe filesystem (NPFS) のルートディレクトリに置かれ、\\.\pipe\ という特別なパスにマウントされる(つまり、"foo" という名前付きパイプのパス名は "\\.\pipe\foo" となる)。無名パイプも実際にはランダムな名前の名前付きパイプとして実装されている。

Windows上でユーザーが名前付きパイプを目にすることは滅多にないが、例外もある。PC用ハードウェア仮想化ツールであるVMware Workstationでは、ホストシステムのシリアルポートをゲストOSに見せるのに名前付きパイプを使っている。マイクロソフトのカーネルモードデバッガ WinDbg英語版 はデバッグ操作の通信手段として名前付きパイプをサポートしている。なお、WinDbg は通常はデバッグ対象コンピュータとシリアルポートで接続するので、WinDbg と VMware Workstation は相互接続可能であり、デバイスドライバのデバッグを単一のコンピュータ上で行うことができる。どちらのプログラムも \\.\pipe\name という形で名前付きパイプの名前をユーザーが入力する必要がある。

Windows NT の名前付きパイプはセキュリティコンテキストを継承できる。

Microsoft Windows の名前付きパイプについてまとめると次のようになる。

  • マシン間およびマシン内のIPC
  • 全二重または半二重
  • バイト単位またはメッセージ単位
  • 高信頼
  • リード/ライトでブロックするか否かを選択可能
  • 標準デバイスI/Oハンドルを使用 (FileRead, FileWrite)
  • 専用名前空間を使ってハンドルを作成
  • WANトラフィックは効率的でない(TCP/IPなどのようなトラフィック制御は行われない)。
  • パイプの入力バッファからデータを取り除かずにリード可能

.NET Framework 3.5 で名前付きパイプサポートが追加された[5]

Microsoft SQL Server はクライアントとの接続に名前付きパイプも使用できる[6]

特殊なプロセス間通信 (IPC) 共有に基づき、Server Message Block (SMB) で名前付きパイプをネットワークプロトコルとして使用している。SMBのIPCは、名前付きパイプを通してユーザーの認証コンテキストをシームレスかつ透過的に渡すことができる。Windows NT のNTドメインのプロトコルは、名前付きパイプ上のDCE/RPCサービスとして実装されている。

関連項目




「名前付きパイプ」の続きの解説一覧




名前付きパイプと同じ種類の言葉


英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「名前付きパイプ」の関連用語

名前付きパイプのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



名前付きパイプのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアの名前付きパイプ (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。

©2024 GRAS Group, Inc.RSS