電子書籍の厳選無料作品が豊富!

画面への文字出力が、標準出力(stdout)と標準エラー出力(stderr)の
両方もつような、コンソールアプリ(exe形式)のツールを動作させたときに、
画面上には、
stdout1
STDERR1
stdout2
STDERR2
stdout3
STDERR3
のような順番で処理順にメッセージが出るのですが、
これをファイルに落とそうとして、
 C:\>hoge.exe 1> log.txt 2>1&
とすると、log.txtの中身が、
C:\>type log.txt
STDERR1
STDERR2
STDERR3
stdout1
stdout2
stdout3
のような標準エラー出力が先に吐き出される順番になってしまっています。

これを、exe実行前に、MS-DOSとして何らかの設定を行うことで、
ファイルに落とした時も、出力された文字が時系列に保存されるように
する方法はあるでしょうか?
よろしくお願いします。

A 回答 (1件)

標準出力のバッファリングはOSではなくプログラム側で行っているはずなんで、OS側の設定では多分不可能だと思います。


プログラムの再ビルドが可能なのであれば、setbuf()で標準出力のバッファリングを止めればうまくいきます。標準エラー出力は最初からバッファリング無しです。
反則技として、コマンドプロンプトのバッファサイズを極端に大きくするという手があります(切り出しに相当手間が掛かりますが)。

この回答への補足

「コマンドプロンプトのバッファサイズを極端に大きくする」という
というのは、コマンドプロンプトのプロパティから、「オプション」タブ→コマンド履歴→「バッファサイズ」のところで指定するのですか?

補足日時:2006/01/28 20:20
    • good
    • 0
この回答へのお礼

お礼が遅くなりました。
プログラムはいわゆる製品のもので、バイナリ実行形式しかなく、リビルドが出来ないため、今回はあきらめるしか無さそうです。
→画面表示の領域を大きくして、表示される文字をひたすらコピーする
という方法しかなさそうですね。。。

お礼日時:2006/01/28 20:19

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!