我能以非规范的方式从标准输入读取吗?

Fel*_*res 5 linux rust

有没有办法可以在Linux下以非规范模式读取stdin?非规范输入意味着对stdin的调用应在用户输入后立即返回,这不是默认行为,因为可以通过尝试看到:read()

// Create a buffer
let mut buffer :[u8; 1] = [0];
// Loops over the input from stdin, one character a time
while io::stdin().read(&mut buffer).unwrap() > 0 {
    println!("{:?}", buffer);
}
Run Code Online (Sandbox Code Playgroud)

此代码等待用户按下return以打印内容buffer.所需的行为是在用户输入时打印.在Stdin(stdin()上面代码中的调用返回的结构)的文档中,没有引用如何更改此默认行为.

Adr*_*ian 1

不,没有外部板条箱或不安全的 FFI 代码就不行。您可能想要使用termios函数。具体请参见ICANONtcsetattr。crate nix具有这些功能的绑定。请参阅此处了解如何在 Rust 中使用它们的示例。