Rollup merge of #142102 - kiseitai3:141714_stdin_read_to_string_docs, r=tgross35
docs: Small clarification on the usage of read_to_string and read_to_end trait methods Small clarification on the usage of read_to_string and read_to_end trait methods. The goal is to make it clear that these trait methods will become locked up if attempting to read to the end of stdin (which is a bit non-sensical unless the other end closes the pipe). Fixes: rust-lang/rust#141714
This commit is contained in:
commit
590f630ec6
1 changed files with 40 additions and 0 deletions
|
|
@ -917,6 +917,19 @@ pub trait Read {
|
|||
/// # }
|
||||
/// ```
|
||||
///
|
||||
/// # Usage Notes
|
||||
///
|
||||
/// `read_to_end` attempts to read a source until EOF, but many sources are continuous streams
|
||||
/// that do not send EOF. In these cases, `read_to_end` will block indefinitely. Standard input
|
||||
/// is one such stream which may be finite if piped, but is typically continuous. For example,
|
||||
/// `cat file | my-rust-program` will correctly terminate with an `EOF` upon closure of cat.
|
||||
/// Reading user input or running programs that remain open indefinitely will never terminate
|
||||
/// the stream with `EOF` (e.g. `yes | my-rust-program`).
|
||||
///
|
||||
/// Using `.lines()` with a [`BufReader`] or using [`read`] can provide a better solution
|
||||
///
|
||||
///[`read`]: Read::read
|
||||
///
|
||||
/// [`Vec::try_reserve`]: crate::vec::Vec::try_reserve
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize> {
|
||||
|
|
@ -960,6 +973,19 @@ pub trait Read {
|
|||
/// (See also the [`std::fs::read_to_string`] convenience function for
|
||||
/// reading from a file.)
|
||||
///
|
||||
/// # Usage Notes
|
||||
///
|
||||
/// `read_to_string` attempts to read a source until EOF, but many sources are continuous streams
|
||||
/// that do not send EOF. In these cases, `read_to_string` will block indefinitely. Standard input
|
||||
/// is one such stream which may be finite if piped, but is typically continuous. For example,
|
||||
/// `cat file | my-rust-program` will correctly terminate with an `EOF` upon closure of cat.
|
||||
/// Reading user input or running programs that remain open indefinitely will never terminate
|
||||
/// the stream with `EOF` (e.g. `yes | my-rust-program`).
|
||||
///
|
||||
/// Using `.lines()` with a [`BufReader`] or using [`read`] can provide a better solution
|
||||
///
|
||||
///[`read`]: Read::read
|
||||
///
|
||||
/// [`std::fs::read_to_string`]: crate::fs::read_to_string
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
fn read_to_string(&mut self, buf: &mut String) -> Result<usize> {
|
||||
|
|
@ -1262,6 +1288,20 @@ pub trait Read {
|
|||
/// Ok(())
|
||||
/// }
|
||||
/// ```
|
||||
///
|
||||
/// # Usage Notes
|
||||
///
|
||||
/// `read_to_string` attempts to read a source until EOF, but many sources are continuous streams
|
||||
/// that do not send EOF. In these cases, `read_to_string` will block indefinitely. Standard input
|
||||
/// is one such stream which may be finite if piped, but is typically continuous. For example,
|
||||
/// `cat file | my-rust-program` will correctly terminate with an `EOF` upon closure of cat.
|
||||
/// Reading user input or running programs that remain open indefinitely will never terminate
|
||||
/// the stream with `EOF` (e.g. `yes | my-rust-program`).
|
||||
///
|
||||
/// Using `.lines()` with a [`BufReader`] or using [`read`] can provide a better solution
|
||||
///
|
||||
///[`read`]: Read::read
|
||||
///
|
||||
#[stable(feature = "io_read_to_string", since = "1.65.0")]
|
||||
pub fn read_to_string<R: Read>(mut reader: R) -> Result<String> {
|
||||
let mut buf = String::new();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue