为什么从 /dev/zero 读取一行输入会使我的计算机无响应?

Why does reading a line of input from /dev/zero make my computer unresponsive?

构建此代码时:

use std::io;

fn main() {
    let mut guess = String::new();
    let res = io::stdin()
        .read_line(&mut guess)
        .expect("Failed to read line");
}

然后执行:

cargo run < /dev/zero

我的电脑(低于 Ubuntu 20)没有响应。

我已阅读 the manual page of the readline function 并且此行为似乎不正常。

我错过了什么?

/dev/zero 是 never-ending 字节的 NUL 流。 read_line 在读取换行符时停止。所以,这个函数永远不会 return 并且会尝试无限扩展缓冲区。您的计算机变得无响应的原因可能是因为它启动 swapping 频繁,以容纳 ever-growing 缓冲区。

read_line()绝对不是你想要的。尝试读取固定数量的字节?