diff options
| author | bors <bors@rust-lang.org> | 2014-02-21 23:56:47 -0800 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2014-02-21 23:56:47 -0800 |
| commit | 068781e5aa6d2b6af04aeb6c44de4296a5a0b004 (patch) | |
| tree | 0ed28c6d380d79c5a162d6a44b6939c822e82988 /src/libstd/io | |
| parent | 698042de238644341b798238bd5a61ea2f3c0f20 (diff) | |
| parent | 7736985f78e43aa2e7f45c5ad19a520c97f45d8f (diff) | |
| download | rust-068781e5aa6d2b6af04aeb6c44de4296a5a0b004.tar.gz rust-068781e5aa6d2b6af04aeb6c44de4296a5a0b004.zip | |
auto merge of #12422 : alexcrichton/rust/buffered-default, r=brson
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.
Diffstat (limited to 'src/libstd/io')
| -rw-r--r-- | src/libstd/io/mod.rs | 11 | ||||
| -rw-r--r-- | src/libstd/io/stdio.rs | 19 |
2 files changed, 20 insertions, 10 deletions
diff --git a/src/libstd/io/mod.rs b/src/libstd/io/mod.rs index f09dc3da9bf..d9419fb3ebc 100644 --- a/src/libstd/io/mod.rs +++ b/src/libstd/io/mod.rs @@ -26,11 +26,9 @@ Some examples of obvious things you might want to do * Read lines from stdin ```rust - use std::io::BufferedReader; - use std::io::stdin; + use std::io; - let mut stdin = BufferedReader::new(stdin()); - for line in stdin.lines() { + for line in io::stdin().lines() { print!("{}", line); } ``` @@ -1097,10 +1095,9 @@ pub trait Buffer: Reader { /// # Example /// /// ```rust - /// use std::io::{BufferedReader, stdin}; - /// - /// let mut reader = BufferedReader::new(stdin()); + /// use std::io; /// + /// let mut reader = io::stdin(); /// let input = reader.read_line().ok().unwrap_or(~"nothing"); /// ``` /// diff --git a/src/libstd/io/stdio.rs b/src/libstd/io/stdio.rs index 2cc0c67ff6a..e1f0d87e130 100644 --- a/src/libstd/io/stdio.rs +++ b/src/libstd/io/stdio.rs @@ -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 }) } |
