2016-02-26 1 views
4

Déclaration"cat/dev/random" versus "tail -f/dev/random"

cat /dev/random 

continue à produire la sortie, comme prévu, mais

tail -f /dev/random 

(au moins se bloque sur Mac OS X et SUSE). Pourquoi la dernière instruction est-elle bloquée?

+0

Pas de programmation, mais lisez la page de manuel pour la queue et vous comprendrez ce qu'il fait. Ce n'est pas un chat. –

+0

Vous ne savez pas exactement ce que vous utilisez/dev/random mais vous préférez probablement/dev/urandom à la place. – voutasaurus

Répondre

8

tail -f fait plusieurs choses:

  1. Trouvez la fin du flux, soit en lisant jusqu'à atteindre un EOF ou en faisant un cherchent à la fin (une opération non disponible sur /dev/random). Sauvegarder une certaine longueur (éventuellement en conservant un tampon d'une longueur appropriée récemment lue, éventuellement en conservant une liste des positions de recherche pour les N dernières lignes pendant le balayage initial ou par d'autres moyens), et imprimer le contenu entre ce point et la fin.
  2. Continuer à imprimer les nouveaux contenus après ce point au fur et à mesure que ces contenus deviennent disponibles.

S'il n'y a pas de fin - comme c'est le cas pour /dev/random - cette première étape ne se terminera jamais.

cat n'a pas besoin de trouver une fin pour y revenir, et donc aucun point de défaillance n'est associé.