外部過程の標準入力(
stdin)ストリームや、標準出力(
stdout)ストリームを開き、ファイル操作のように使います。
構文:
Open Pipe shell_command For Input As [#]filenumber
Open Pipe shell_command For Output As [#]filenumber
Open Pipe shell_command For Binary access_type [#]filenumber
用法:
result = Open Pipe( command[,] For {Input|Output}[,] As filenumber )
または、
result = Open Pipe( command[,] For Binary[,] access_type[,] As filenumber )
(または、QB-風の構文で、)
Open Pipe filename For {Input|Output} As filenumber
(または、)
Open Pipe filename For Binary access_type As filenumber
パラメタ:
shell_command
オペレーティング・システムのコマンド・シェルの中で実行する外部過程です。
相対ファイル経路は、現在のディレクトリからの相対パスです(
Curdir を見てください)。
実行パスや引数に二重引用符を必要とするプロセスのためにパイプを開く場合、パイプ文字列全体を二重引用符の中に入れ子にする必要があります。
access_type
呼び出し過程で要求される、読みとりか書き込みのアクセスの形式。
- Access {Read|Write} (外部過程の stdin か stdout ストリームの、どちらかを開くことができます)
filenumber
外部過程の stdin か stdout ストリームに結びつけるために、利用可能なファイル番号。
戻り値:
最初の用法で、
Open Pipe は、32 bit
Long を返します:成功の場合は、ゼロ (
0) を、そうでなければ、ゼロ以外のエラー・コードを返します。
記述:
Open Pipe は、コマンド・シェルの中で別のプロセスを実行します。そして、読み書きのために
stdin 流れか
stdout 流れのいずれかを開きます。
file number は、流れに結び付けます。そして、以降の
Input # などの、ファイル操作で使われます。利用可能な
filenumber は、
Freefile で検索できます。
外部過程が存在しないと、ランタイム・エラーになります。
Input と
Output の
file mode は、外部過程の
stdin 流れと
stdout 流れを開きます。それぞれ、テキストを順次 I/O して、プレーンテキストを、読んだり、書いたりできます。
文字、単語または行全体は、
Line Input # や
Print # のような、テキスト・モード・ファイル操作を使って、読んだり、書いたり、できます。
Binary file mode は、外部過程の
stdin 流れか
stdout 流れを開きます。これは、指定される
access type (上の
access_type パラメータの説明を見てください) に従います。そして、任意のサイズの、解釈された生データを、ランダム・アクセス読み取り、あるいは書き出しします。
Byte と
Longint のような簡単なデータ型の値と、メモリの全体の塊は、
Get # や
Put # のようなバイナリ・モードのファイル操作で、流れから読み込むか、または流れに書くことができます。
FB は、双方向のパイプをサポートしないので、OS の API関数を使って実装しなければなりません。
Open Pipe が返すエラーコードは、次の行の
Err を使ってチェックできます。 関数バージョンの
Open Pipe は、エラー・コードを直接 32 bit
Long で返します。
ランタイム・エラー:
(1) Illegal function call
-
このとき、filenumber は、空いていませんでした。Freefile を使って、空いている filenumber を見つけて下さい。
例:
'' この例は、Open Pipe を使って、シェル・コマンドを実行し、出力を検索します。
#ifdef __FB_UNIX__
Const TEST_COMMAND = "ls *"
#else
Const TEST_COMMAND = "dir *.*"
#endif
Open Pipe TEST_COMMAND For Input As #1
Dim As String ln
Do Until EOF(1)
Line Input #1, ln
Print ln
Loop
Close #1
Dim text As String
Dim COUNTER As Integer
'fbc.exe のパスは、お使いの環境に合わせて修正して下さい。
COUNTER = 0
Open Pipe "C:\Tool\FreeBASIC\fbc.exe" For Input As #1
Print "Output of fbc:"
Do While Not EOF
(1)
Line Input #1, text
Print text
COUNTER = COUNTER + 1
If COUNTER Mod 10 = 0 Then Sleep
Loop
Close #1
Sleep
渡辺 注:引数無しで fbc.exe を実行すると、コンパイラのふるまいを指定するために使える、オプションとコマンドライン・スイッチの、リストが、表示されます。
プラットホーム差:
-
Binary file mode は、すべてのプラットホームでサポートされるわけではありません。
Open Pipe は、バイナリ・モードで、外部過程の stdin か stdout 流れを開くことができないと、エラーを投げます。
QBからの違い:
参照: