Maison > développement back-end > C++ > Est-ce que stdin est un terminal ou un tuyau ?

Est-ce que stdin est un terminal ou un tuyau ?

Susan Sarandon
Libérer: 2024-12-29 16:28:16
original
437 Les gens l'ont consulté

Is stdin a Terminal or a Pipe?

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");
Copier après la connexion

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();
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal