"cat/dev/random"与"tail -f/dev/random"

Ped*_*dja 5 unix linux random shell tail

声明

cat /dev/random
Run Code Online (Sandbox Code Playgroud)

按预期继续产出产量,但是

tail -f /dev/random
Run Code Online (Sandbox Code Playgroud)

挂起(至少在OSX和SUSE上).为什么后一种说法会挂起?

Cha*_*ffy 9

tail -f 做了几件事:

  1. 找到流的末尾,通过读取直到达到EOF或通过搜索到最后(不可用的操作/dev/random).
  2. 备份一定长度(可能通过保留最近读取的适当长度内容的缓冲区,可能通​​过在初始扫描期间保留最后N行的搜索位置列表,或通过其他方式),并在两者之间打印内容那一点和结束.
  3. 随着这些内容变得可用,继续打印该点之后的新内容.

如果没有结束 - 就像这样/dev/random- 第一步永远不会完成.

cat 不需要找到一个从它那里寻求回头的结局,所以它没有相关的失败点.