summary refs log tree commit diff
path: root/src/libstd/io
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2014-02-21 23:56:47 -0800
committerbors <bors@rust-lang.org>2014-02-21 23:56:47 -0800
commit068781e5aa6d2b6af04aeb6c44de4296a5a0b004 (patch)
tree0ed28c6d380d79c5a162d6a44b6939c822e82988 /src/libstd/io
parent698042de238644341b798238bd5a61ea2f3c0f20 (diff)
parent7736985f78e43aa2e7f45c5ad19a520c97f45d8f (diff)
downloadrust-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.rs11
-rw-r--r--src/libstd/io/stdio.rs19
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 })
 }