※ ChatGPTを利用し、要約された質問です(原文:標準出力上でのファイルポインタの扱いで困っています。)
ファイルポインタの扱いで困っています
このQ&Aのポイント
標準出力上でのファイルポインタの扱いについて困っています。プログラムの一部では、ファイル内での動作が正常に行われていますが、同様の動作が標準出力上ではうまくいきません。
具体的には、標準出力でのファイルポインタを指定して位置を移動することができないようです。前の行ではなく、次の行の先頭からのオフセットが適用されてしまっています。
標準出力でのファイルポインタの移動はできないため、Seek()関数などを使用することができません。
標準出力上でのファイルポインタの扱いで困っています。
標準出力上でのファイルポインタの扱いで困っています。
簡単な例で説明すると、
下のプログラムはファイル内で、一秒ごとに左から順に1を0で置き換えていくもので正常に動作します。
open(F, '+< temp');
print F "11111111111111111111111111111111\n";
for(0..31){
seek(F, $_, 0);
print F '0';
sleep(1);
}
close(F);
同様のことが標準出力でも可能かと思って以下のようにしてみたのですが、うまくいきません。
open(STDOUT, '+<');
print STDOUT "11111111111111111111111111111111\n";
for (0..31){
seek(STDOUT, $_, 0);
print STDOUT '0';
sleep(1);
}
close(STDOUT);
}
2つ目の例では動作を見るかぎり、ファイルポインタは1111.....の先頭からのオフセットではなく、その次の行(空行)の先頭からのオフセットとなっているように見えます。つまり古い行には戻れていないようです。
Seek()は標準出力上では使えないのでしょうか?
お礼
Xtermのエスケープシーケンスで代用することにしました。 ありがとうございました。