Return a buffered stdin by default.
One of the most common ways to use the stdin stream is to read it line by line for a small program. In order to facilitate this common usage pattern, this commit changes the stdin() function to return a BufferedReader by default. A new `stdin_raw()` method was added to get access to the raw unbuffered stream. I have not changed the stdout or stderr methods because they are currently unable to flush in their destructor, but #12403 should have just fixed that.
This commit is contained in:
parent
879e8aa7be
commit
7736985f78
3 changed files with 21 additions and 11 deletions
|
@ -30,7 +30,7 @@ out.write(bytes!("Hello, world!"));
|
|||
use container::Container;
|
||||
use fmt;
|
||||
use io::{Reader, Writer, IoResult, IoError, OtherIoError,
|
||||
standard_error, EndOfFile, LineBufferedWriter};
|
||||
standard_error, EndOfFile, LineBufferedWriter, BufferedReader};
|
||||
use libc;
|
||||
use mem::replace;
|
||||
use option::{Option, Some, None};
|
||||
|
@ -86,8 +86,21 @@ fn src<T>(fd: libc::c_int, readable: bool, f: |StdSource| -> T) -> T {
|
|||
|
||||
/// Creates a new non-blocking handle to the stdin of the current process.
|
||||
///
|
||||
/// See `stdout()` for notes about this function.
|
||||
pub fn stdin() -> StdReader {
|
||||
/// The returned handled is buffered by default with a `BufferedReader`. If
|
||||
/// buffered access is not desired, the `stdin_raw` function is provided to
|
||||
/// provided unbuffered access to stdin.
|
||||
///
|
||||
/// See `stdout()` for more notes about this function.
|
||||
pub fn stdin() -> BufferedReader<StdReader> {
|
||||
BufferedReader::new(stdin_raw())
|
||||
}
|
||||
|
||||
/// Creates a new non-blocking handle to the stdin of the current process.
|
||||
///
|
||||
/// Unlike `stdin()`, the returned reader is *not* a buffered reader.
|
||||
///
|
||||
/// See `stdout()` for more notes about this function.
|
||||
pub fn stdin_raw() -> StdReader {
|
||||
src(libc::STDIN_FILENO, true, |src| StdReader { inner: src })
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue