Struct std::io::Stdin1.0.0[][src]

pub struct Stdin { /* fields omitted */ }
Expand description

进程的标准输入流的句柄。

每个句柄都是对该进程输入数据的全局缓冲区的共享引用。 可以对句柄进行 lock,以获取对 BufRead 方法 (例如 .lines()) 的完全访问权限。 否则,将针对其他读取锁定对此句柄的读取。

该句柄实现了 Read trait,但请注意,必须谨慎执行 Stdin 的并发读取。

io::stdin 方法创建。

Note: Windows 可移植性注意事项

在控制台中操作时,此流的 Windows 实现不支持非 UTF-8 字节序列。

尝试读取无效的 UTF-8 字节将返回错误。

Examples

use std::io::{self, Read};

fn main() -> io::Result<()> {
    let mut buffer = String::new();
    let mut stdin = io::stdin(); // 我们在这里得到 `Stdin`。
    stdin.read_to_string(&mut buffer)?;
    Ok(())
}
Run

Implementations

将此句柄锁定到标准输入流,返回可读的保护。

当返回的锁离开作用域时,将释放该锁。 返回的防护还实现了用于访问基础数据的 ReadBufRead traits。

Examples

use std::io::{self, Read};

fn main() -> io::Result<()> {
    let mut buffer = String::new();
    let stdin = io::stdin();
    let mut handle = stdin.lock();

    handle.read_to_string(&mut buffer)?;
    Ok(())
}
Run

锁定此句柄并读取输入行,并将其添加到指定的缓冲区。

有关此方法的详细语义,请参见 BufRead::read_line 上的文档。

Examples

use std::io;

let mut input = String::new();
match io::stdin().read_line(&mut input) {
    Ok(n) => {
        println!("{} bytes read", n);
        println!("{}", input);
    }
    Err(error) => println!("error: {}", error),
}
Run

您可以通过以下两种方式之一运行示例:

  • 用管道将一些文本发送给它,例如, printf foo | path/to/executable
  • 通过直接运行可执行文件以交互方式输入文本,在这种情况下,它将等待按下 Enter 键,然后继续
🔬 This is a nightly-only experimental API. (stdio_locked #86845)

将此句柄用于标准输入流,锁定与流相关联的共享缓冲区并返回可读保护。

当返回的守卫作用域解除锁定。 返回的防护还实现了用于访问基础数据的 ReadBufRead traits。

使用 stdin_locked 函数直接获取锁定句柄通常更简单,除非附近的代码也需要使用解锁句柄。

Examples

#![feature(stdio_locked)]
use std::io::{self, Read};

fn main() -> io::Result<()> {
    let mut buffer = String::new();
    let mut handle = io::stdin().into_locked();

    handle.read_to_string(&mut buffer)?;
    Ok(())
}
Run
🔬 This is a nightly-only experimental API. (stdin_forwarders #87096)

使用这个句柄并在输入行上返回一个迭代器。

有关此方法的详细语义,请参见 BufRead::lines 上的文档。

Examples

#![feature(stdin_forwarders)]
use std::io;

let lines = io::stdin().lines();
for line in lines {
    println!("got a line: {}", line.unwrap());
}
Run
🔬 This is a nightly-only experimental API. (stdin_forwarders #87096)

使用此句柄并返回输入字节的迭代器,在指定的字节值处拆分。

有关此方法的详细语义,请参见 BufRead::split 上的文档。

Examples

#![feature(stdin_forwarders)]
use std::io;

let splits = io::stdin().split(b'-');
for split in splits {
    println!("got a chunk: {}", String::from_utf8_lossy(&split.unwrap()));
}
Run

Trait Implementations

This is supported on Unix only.

提取原始文件描述符。 Read more

This is supported on WASI only.
🔬 This is a nightly-only experimental API. (wasi_ext #71213)

提取原始文件描述符。 Read more

This is supported on Windows only.

提取原始句柄,无需任何所有权。

使用给定的格式化程序格式化该值。 Read more

从该源中提取一些字节到指定的缓冲区中,返回读取的字节数。 Read more

read 相似,不同之处在于它读入缓冲区的一部分。 Read more

🔬 This is a nightly-only experimental API. (can_vector #69941)

确定此 Read 是否具有有效的 read_vectored 实现。 Read more

🔬 This is a nightly-only experimental API. (read_initializer #42788)

确定该 Reader 是否可以与未初始化内存的缓冲区一起使用。 Read more

读取所有字节,直到此源中的 EOF 为止,然后将它们放入 bufRead more

读取所有字节,直到该源中的 EOF 为止,然后将它们附加到 bufRead more

读取填充 buf 所需的确切字节数。 Read more

为此 Read 实例创建 “by reference” 适配器。 Read more

将此 Read 实例的字节数转换为 IteratorRead more

创建一个适配器,它将将此流与另一个流链接。 Read more

创建一个适配器,该适配器最多可以从中读取 limit 字节。 Read more

Auto Trait Implementations

Blanket Implementations

获取 selfTypeIdRead more

从拥有的值中一成不变地借用。 Read more

从拥有的值中借用。 Read more

执行转换。

执行转换。

发生转换错误时返回的类型。

执行转换。

发生转换错误时返回的类型。

执行转换。