pub struct Stdin { /* private fields */ }
Expand description
进程的标准输入流的句柄。
每个句柄都是对该进程输入数据的全局缓冲区的共享引用。可以对句柄进行 lock
,以获取对 BufRead
方法 (例如 .lines()
) 的完全访问权限。
否则,将针对其他读取锁定对此句柄的读取。
该句柄实现了 Read
trait,但请注意,必须谨慎执行 Stdin
的并发读取。
由 io::stdin
方法创建。
Note: Windows 可移植性注意事项
在控制台中操作时,此流的 Windows 实现不支持非 UTF-8 字节序列。 尝试读取无效的 UTF-8 字节将返回错误。
在具有分离控制台的进程中,例如使用 #![windows_subsystem = "windows"]
的进程,或在从此类进程派生的子进程中,包含的句柄将为空。
在这种情况下,标准库的 Read
和 Write
将什么都不做,默默地成功。
通过标准库或通过原始 Windows API 调用的所有其他 I/O 操作都将失败。
Examples
use std::io;
fn main() -> io::Result<()> {
let mut buffer = String::new();
let stdin = io::stdin(); // 我们在这里得到 `Stdin`。
stdin.read_line(&mut buffer)?;
Ok(())
}
RunImplementations§
source§impl Stdin
impl Stdin
sourcepub fn read_line(&self, buf: &mut String) -> Result<usize>
pub fn read_line(&self, buf: &mut String) -> Result<usize>
锁定此句柄并读取输入行,并将其添加到指定的缓冲区。
有关此方法的详细语义,请参见 BufRead::read_line
上的文档。
Examples
use std::io;
let mut input = String::new();
match io::stdin().read_line(&mut input) {
Ok(n) => {
println!("{n} bytes read");
println!("{input}");
}
Err(error) => println!("error: {error}"),
}
Run您可以通过以下两种方式之一运行示例:
- 通过管道将一些文本传递给它,例如
printf foo | path/to/executable
- 通过直接运行可执行文件以交互方式输入文本,在这种情况下,它将等待按下 Enter 键,然后继续
Trait Implementations§
1.63.0 · source§impl AsHandle for Stdin
Available on Windows only.
impl AsHandle for Stdin
Available on Windows only.
source§fn as_handle(&self) -> BorrowedHandle<'_>
fn as_handle(&self) -> BorrowedHandle<'_>
借用句柄。 Read more
1.21.0 · source§impl AsRawHandle for Stdin
Available on Windows only.
impl AsRawHandle for Stdin
Available on Windows only.
source§fn as_raw_handle(&self) -> RawHandle
fn as_raw_handle(&self) -> RawHandle
提取原始句柄。 Read more
1.70.0 · source§impl IsTerminal for Stdin
impl IsTerminal for Stdin
source§fn is_terminal(&self) -> bool
fn is_terminal(&self) -> bool
如果 descriptor/handle 引用 terminal/tty,则返回
true
。 Read moresource§impl Read for Stdin
impl Read for Stdin
source§fn read_buf(&mut self, buf: BorrowedCursor<'_>) -> Result<()>
fn read_buf(&mut self, buf: BorrowedCursor<'_>) -> Result<()>
🔬This is a nightly-only experimental API. (
read_buf
#78485)从此源中提取一些字节到指定的缓冲区中。 Read more
source§fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize>
fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize>
与
read
相似,不同之处在于它读入缓冲区的一部分。 Read moresource§fn is_read_vectored(&self) -> bool
fn is_read_vectored(&self) -> bool
🔬This is a nightly-only experimental API. (
can_vector
#69941)source§fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize>
fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize>
读取所有字节,直到此源中的 EOF 为止,然后将它们放入
buf
。 Read moresource§fn read_to_string(&mut self, buf: &mut String) -> Result<usize>
fn read_to_string(&mut self, buf: &mut String) -> Result<usize>
读取这个源中的所有字节,直到 EOF 为止,然后将它们追加到
buf
。 Read moresource§fn read_buf_exact(&mut self, cursor: BorrowedCursor<'_>) -> Result<()>
fn read_buf_exact(&mut self, cursor: BorrowedCursor<'_>) -> Result<()>
🔬This is a nightly-only experimental API. (
read_buf
#78485)读取填充
cursor
所需的确切字节数。 Read moresource§fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
fn by_ref(&mut self) -> &mut Selfwhere Self: Sized,
为这个
Read
实例创建一个 “by reference” 适配器。 Read more