Sous Unix, la plupart des objets que vous pouvez lire et écrire - fichiers ordinaires, canaux, terminaux, lecteurs de disque bruts - sont tous conçus pour ressembler à des fichiers.
Un programme comme cat
lit à partir de son entrée standard comme ceci:
n = read(0, buffer, 512);
qui demande 512 octets. n
est le nombre d'octets réellement lus, ou -1 s'il y a une erreur.
Si vous faisiez cela à plusieurs reprises avec un fichier ordinaire, vous obtiendrez un tas de lectures de 512 octets, puis une lecture un peu plus courte à la fin du fichier, puis 0 si vous essayez de lire après la fin du fichier. Donc, cat
s'exécutera jusqu'à ce que n
<= 0.
La lecture à partir d'un terminal est légèrement différente. Après avoir tapé une ligne, terminée par la Enterclé, read
renvoie uniquement cette ligne.
Vous pouvez saisir quelques caractères spéciaux. L'un est Ctrl-D. Lorsque vous saisissez cela, le système d'exploitation envoie toute la ligne actuelle que vous avez tapée (mais pas la ligne Ctrl-Delle - même) au programme effectuant la lecture. Et voici la chose fortuite: si Ctrl-Dest le premier caractère sur la ligne, le programme reçoit une ligne de longueur 0 - tout comme le programme verrait s'il arrive juste à la fin d'un fichier ordinaire. cat
n'a pas besoin de faire quoi que ce soit différemment , que ce soit la lecture d'un fichier ordinaire ou d'un terminal.
Un autre caractère spécial est Ctrl-Z. Lorsque vous le tapez, n'importe où dans une ligne, le système d'exploitation rejette tout ce que vous avez tapé jusqu'à ce point et envoie un signal SIGTSTP au programme, qui normalement l'arrête (le met en pause) et rend le contrôle au shell.
Donc, dans votre exemple
$ cat > file.txt
pa bam pshhh<Ctrl+Z>
[2]+ Stopped cat > file.txt
vous avez tapé certains caractères qui ont été supprimés, puis avez cat
été arrêté sans avoir rien écrit dans son fichier de sortie.
$ cat > file.txt
pa bam pshhh
<Ctrl+Z>
[2]+ Stopped cat > file.txt
vous avez tapé une ligne, qui a cat
lu et écrit dans son fichier de sortie, puis Ctrl-Zarrêté cat
.