Détermination de la nature de l'entrée standard : terminal ou canalisation
Dans divers scénarios, il peut être avantageux de différencier si l'entrée standard (stdin) représente un terminal ou un tube. Cette distinction devient évidente dans la divergence de comportement présentée par Python lorsqu'il est invoqué sans arguments depuis le terminal, par rapport à lorsqu'une entrée redirigée est fournie. Pour reproduire une telle détection, divers langages de programmation, dont C, C et Qt, proposent différentes approches.
Approche Unix : isatty
Pour C et C, l'Unix L'appel système isatty() fournit un moyen de déterminer la nature de stdin. Cette fonction prend comme paramètre un entier représentant le descripteur de fichier du fichier interrogé. Pour stdin, ceci est généralement obtenu en utilisant l'expression fileno(stdin). Si le descripteur de fichier correspond à un terminal, isatty() renvoie une valeur non nulle, indiquant que stdin est un terminal. À l'inverse, une valeur zéro indique que stdin n'est pas un terminal, représentant probablement un tube ou un fichier.
Exemple :
#include <stdio.h> #include <io.h> ... if (isatty(fileno(stdin))) printf("stdin is a terminal\n"); else printf("stdin is a file or a pipe\n");
Approche Qt : QTextStream
Pour Qt, une méthode différente est requise en raison de l'approche orientée objet du framework. Qt utilise un QTextStream pour interagir avec stdin, qui peut être utilisé pour déterminer si stdin provient ou non d'un terminal. Une instance de QTextStream est créée en appelant QTextStream(stdin) avec stdin comme argument. Le code suivant illustre cette approche :
QTextStream qin(stdin); bool isTerminal = qin.device()->isInteractive();
Dans ce cas, isInteractive renvoie true si stdin est un terminal et false s'il s'agit d'un tube ou d'un fichier.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!