5.10 Mort d'un flux
Les filtres, c'est-à-dire les tâches qui exploitent un flux pour en produire
un autre, ne vivent que la durée du flux qui les alimente.
Une fin de flux est déterminée par une réponse négative à une demande
de lecture.
Lorsqu'un flux est créé par une lecture dans un fichier (suite d'octets
bornée), la fin de flux est facile à prévoir.
Mais lorsque le flux provient du clavier ?
On peut ordonner à l'interface de provoquer une fin de flux, ainsi la
tâche en lecture saura-t'elle que le flux issu du clavier est achevé.
La commande
stty eof '^D'
permet de programmer le caractère de fin de flux.
Celui-ci émis en début de ligne (c'est-à-dire juste après un LF) ou encore
répété deux fois,
provoque la terminaison du flux requérant.
Le caractère D n'est pas transmis et n'est donc utilisé que localement
dans l'interface.
Par exemple, la commande suivante
{ tee </dev/tty
echo FIN 1
tee </dev/tty
} >/tmp/test
et les caractères suivants frappés au clavier
abcJdefJghijklDDmnopJD
créeront, dans le fichier :
/tmp/test
abc
def
ghijklFIN 1
mnop
On peut, bien entendu, transmettre un D en le préfixant de V !
De nombreux programmes sont des filtres comme, par exemple,
tee,
mail,
sedou encore
sh.
On peut donc, si l'on est dans le bon mode d'interface, terminer une session
en frappant D ou encore grâce à la commande intrinsèque
exit.