"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
做了几件事:
- 找到流的结尾,通过读取直到到达 EOF 或通过查找结束(
/dev/random
上不可用的操作)。
- 备份一定长度(可能通过保留适当长度的最近读取内容的缓冲区,可能通过保留初始扫描期间最后N行的查找位置列表,或通过其他方式),并打印该点和结尾之间的内容。
- 继续打印超过该点的新内容,因为此类内容可用。
如果没有尽头 - 正如 /dev/random
的情况 - 第一步将永远不会完成。
cat
不需要找到终点来从它返回,因此它没有关联的失败点。
声明
cat /dev/random
如预期的那样继续产生输出,但是
tail -f /dev/random
挂起(至少在 OSX 和 SUSE 上)。 为什么后一条语句挂起?
tail -f
做了几件事:
- 找到流的结尾,通过读取直到到达 EOF 或通过查找结束(
/dev/random
上不可用的操作)。 - 备份一定长度(可能通过保留适当长度的最近读取内容的缓冲区,可能通过保留初始扫描期间最后N行的查找位置列表,或通过其他方式),并打印该点和结尾之间的内容。
- 继续打印超过该点的新内容,因为此类内容可用。
如果没有尽头 - 正如 /dev/random
的情况 - 第一步将永远不会完成。
cat
不需要找到终点来从它返回,因此它没有关联的失败点。