Je jette un coup d'oeil sur le code à l'utilitaire 'less', en particulier comment il obtient l'entrée au clavier. Fait intéressant, la ligne 80 de ttyin.c, il définit le descripteur de fichier à lire:Moins d'entrées au clavier de stderr?
/*
* Try /dev/tty.
* If that doesn't work, use file descriptor 2,
* which in Unix is usually attached to the screen,
* but also usually lets you read from the keyboard.
*/
#if OS2
/* The __open() system call translates "/dev/tty" to "con". */
tty = __open("/dev/tty", OPEN_READ);
#else
tty = open("/dev/tty", OPEN_READ);
#endif
if (tty < 0)
tty = 2;
est un fichier non descripteur 2 stderr? Si oui, WTH ?! Je pensais que l'entrée au clavier était envoyée via stdin.
Fait intéressant, même si vous ls -l * | less
, après que le fichier se termine le chargement, vous pouvez toujours utiliser le clavier pour faire défiler de haut en bas, mais si vous le faites ls -l * | vi
, alors vi criera à vous, car il ne lit pas de stdin . Quelle est la grande idée? Comment est-ce que je me suis retrouvé dans cette étrange nouvelle contrée où stderr est à la fois un moyen de signaler des erreurs à l'écran et de lire depuis le clavier? Je ne pense pas que je suis au Kansas plus ...
BTW, si vous écrivez 'ls -l * | vim -', vim effectuera une magie similaire. – ephemient