"cat /dev/random" 对比 "tail -f /dev/random"

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

声明

cat /dev/random

如预期的那样继续产生输出,但是

tail -f /dev/random

挂起(至少在 OSX 和 SUSE 上)。 为什么后一条语句挂起?

tail -f 做了几件事:

  1. 找到流的结尾,通过读取直到到达 EOF 或通过查找结束(/dev/random 上不可用的操作)。
  2. 备份一定长度(可能通过保留适当长度的最近读取内容的缓冲区,可能通​​过保留初始扫描期间最后N行的查找位置列表,或通过其他方式),并打印该点和结尾之间的内容。
  3. 继续打印超过该点的新内容,因为此类内容可用。

如果没有尽头 - 正如 /dev/random 的情况 - 第一步将永远不会完成。

cat 不需要找到终点来从它返回,因此它没有关联的失败点。