2016-05-03 6 views
0

私はハスケルを学んでおり、hSetBuffering stdin LineBufferingが何を意味しているのか、そしてこのスタイルの他のコマンドがハスケルにあるのか知りたいと思います。LineBufferingのhSetBuffering stdinとは何ですか?

+0

は、あなたはそれが 'stdin'なく' stdout'のですか? [documentation](http://hackage.haskell.org/package/base-4.8.2.0/docs/System-IO.html#v:hSetBuffering)も参照してください。 – chi

答えて

2

stdinのモードでは、end-of-line文字に遭遇するまでアプリケーションが入力を処理できなくなります。基本的には、Returnに達するまで、あなたのアプリはその文字を見ることができません。通常、これは端末入力のデフォルトモードです。他の2つはNoBufferingBlockBufferingです。

は、より多くの詳細については、この回答を参照してください:Haskell default io buffering

はなぜバッファリングが必要なのでしょうか?バッファリングにより、データをより効率的に処理できます。一度に1バイトずつ入力するのではなく、ブロック単位で入力する方が効率的です。ターミナル入力の場合、最も自然なサイズは、一度に1行です。これは通常、対話型コマンドラインアプリケーションの動作です。つまり、行を消費して処理し、何らかの応答を提示するからです。

ここにいくつかの有用な情報:ここではhttp://wcipeg.com/wiki/I/O_buffering

は、より複雑な説明です:https://www.quora.com/In-C-what-does-buffering-I-O-or-buffered-I-O-mean

関連する問題