简体   繁体   中英

“cat /dev/random” versus “tail -f /dev/random”

Statement

cat /dev/random

keeps producing output, as expected, but

tail -f /dev/random

hangs (at least on OSX and SUSE). Why the latter statement hangs?

tail -f does several things:

  1. Find the end of the stream, either by reading until reaching an EOF or by doing a seek to the end (an operation not available on /dev/random ).
  2. Back up a certain length (possibly by retaining a buffer of an appropriate length of contents recently read, possibly by retaining a list of seek positions for the last N lines during the initial scan, or by some other means), and print the contents between that point and the end.
  3. Continue to print new contents past that point as such contents become available.

If there is no end -- as is the case for /dev/random -- that first step will never complete.

cat does not need to find an end to seek back from it, and so it has no point of failure associated.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM