popen関数は,呼び出し元プログラムと,実行を待っているシェル・コマンドの間にパイプを作成します。関数はストリームのための
FILE構造体へのポインタを返します。
popen関数は, DECC$PIPE_BUFFER_SIZE 機能論理名の値を使用して,パイプ用に作成するメールボックスのバッファ・サイズを設定します。 DECC$PIPE_BUFFER_SIZE の値には,512 〜 65024 バイトを指定できます。 DECC$PIPE_BUFFER_SIZE が指定されていない場合,デフォルトのバッファ・サイズ 512 が使用されます。
注意
-
popen関数を使って出力フィルタを呼び出す場合には,出力データがプログラム・バッファに残るために生じるデッドロックの可能性に注意するようにしてください。これは,
setvbuf関数を使って出力ストリームがバッファリングされないようにするか,
fflush関数を使って,
pclose関数を呼び出す前にすべてのバッファリングされたデータをフラッシュさせることによって避けることができます。
- UNIX との互換性を高めるため,以下の機能論理名を使用して, C RTL のパイプ処理の動作を制御することができます。
- DECC$STREAM_PIPE 機能論理名に ENABLE を定義すると,
pipe関数がレコード入出力ではなくストリーム入出力を使用するようになります。
- DECC$POPEN_NO_CRLF_REC_ATTR 機能論理名に ENABLE を定義すると,
popen関数でオープンしたパイプのパイプ・レコードに,CR/LF のキャリッジ制御が追加されなくなります。この機能を有効にすると,
getsのようなキャリッジ・リターン文字に依存している関数で,望ましくない動作になる可能性がある点に注意してください。
|
fflush,
pclose, および
setvbufも参照してください。