Un shell sous Linux (par exemple: bash
) a ses descripteurs de file stdin
et stdout
et stderr
tous pointent vers le même file de périphérique, par exemple, les descripteurs de file stdin
et stdout
et stderr
pour bash
:
Maintenant /dev/tty1
n'est pas un file "réel" que vous pouvez lire et écrire, c'est un file de périphérique qui pointe vers un file ou vers un tampon en memory ou quelque chose d'autre.
Maintenant ma question est, est-ce que /dev/tty1
pointe vers un seul file, ou pointe-t-il vers deux files?
Ce que je veux dire, c'est que quand bash
lit /dev/tty1
( stdin
), et quand bash
écrit dans /dev/tty1
( stdout
ou stderr
), lit-il et écrit dans le même file ou fait /dev/tty1
points à deux files, l'un est utilisé lors de la lecture de /dev/tty1
et l'autre est utilisé lors de l'écriture dans /dev/tty1
?
Un noeud de périphérique pointe vers un seul périphérique , qui est géré par Linux par le kernel. Lorsque bash
lit depuis /dev/tty1
, il lit depuis le pilote de périphérique gérant le premier terminal; quand il écrit, il écrit sur le même pilote de périphérique.
Un file de périphérique ne pointe pas sur plusieurs files. Un file de périphérique ne pointe même pas vers un seul file. Un file de périphérique pointe vers un pilote. Le pilote contient du code qui gère les opérations de lecture et d'écriture.
Il ne doit pas y avoir de relation entre datatables lues à partir du périphérique et datatables écrites. Certains appareils en ont un, d'autres pas. Par exemple, avec un disque, datatables qui sont lues à une certaine position sont datatables qui ont été précédemment écrites dans cette position. D'autre part, avec un port série, datatables écrites sur le périphérique sont envoyées sur la ligne série et datatables lues à partir du périphérique ont été reçues sur la ligne série; ce qui est envoyé est indépendant de ce qui est reçu.
Un terminal ressemble beaucoup à un périphérique série. En fait, historiquement, les terminaux physiques étaient généralement connectés par des lignes série. Lorsqu'une application lit à partir d'un file terminal, elle reçoit des données envoyées par le pilote du terminal ou par l'émulateur de terminal – le pilote / émulateur de terminal écrit l'input sur son côté du terminal, l'application lit l'input depuis son côté du terminal. Lorsqu'une application écrit dans un file terminal, elle envoie des données qui sont ensuite lues par le pilote du terminal ou par l'émulateur de terminal – l'application écrit la sortie sur son côté du terminal, le pilote / l'émulateur du terminal lit sa sortie du terminal .