...ing logging 4.0

はてなブログに移行しました。D言語の話とかいろいろ。

標準入出力

下のように,標準入力 din を foreach で一行ずつ読み込んだらうまくいかなかった.


import std.cstream;
int main(char[][] args)
{
foreach(char[] line; din)
{
dout.writefln(line);
}
return 0;
}

なぜかリダイレクトによる標準入力では問題は起こらないが,


a.exe < textfile

パイプによる標準入力ではループが終了しなくなる!


type textfile | a.exe

なんでやねん,というわけでちょっと一段階バッファを介してみる.


import std.cstream;
int main(char[][] args)
{
Stream dinbuf = new BufferdStream(din);
foreach(char[] line; dinbuf)
{
dout.writefln(line);
}
dinbuf.close();//念のため
return 0;
}

リダイレクト,パイプの両方が期待通りに動作するようになった.
めでたいが, din はそういうものなのか?
すごくめんどいのでなんとかしてくれないかなあ.