Maison >développement back-end >C++ >Comment puis-je détecter si stdin est un terminal ou un tube en C, C et Qt ?

Comment puis-je détecter si stdin est un terminal ou un tube en C, C et Qt ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-09 14:32:12340parcourir

How Can I Detect Whether stdin is a Terminal or a Pipe in C, C  , and Qt?

Détection du type stdin en C, C et Qt

Lors de l'exécution de "python" sans arguments dans un terminal, le shell interactif Python est lancé. Cependant, lorsque "cat | python" est exécuté depuis le terminal, le mode interactif n'est pas activé, indiquant que stdin est connecté à un tube. Cet article explique comment détecter le type stdin en C, C et Qt à l'aide de la fonction isatty.

Présentation de la fonction

La fonction isatty dans stdio.h détermine si un le descripteur de fichier est connecté à un terminal. Lorsqu'il est appliqué à fileno(stdin), il vérifie si stdin est un terminal (par exemple, une console ou un émulateur de terminal) ou non (par exemple, un fichier ou un tube).

Exemple C/C

En C ou C, utilisez le code suivant pour détecter stdin tapez :

#include <stdio.h>
#include <io.h>

int main() {
  if (isatty(fileno(stdin)))
    printf("stdin is a terminal\n");
  else
    printf("stdin is a file or a pipe\n");
  return 0;
}

Exemple Qt

Qt fournit une classe KStdin qui hérite de QIODevice. Il dispose d'une méthode isTerminal() qui peut être utilisée pour vérifier si stdin est connecté à un terminal :

#include <QStdin>

int main() {
  KStdin stdinDevice;
  if (stdinDevice.isTerminal())
    qDebug() << "stdin is a terminal";
  else
    qDebug() << "stdin is a file or a pipe";
  return 0;
}

En utilisant isatty en C ou C ou KStdin dans Qt, il est possible de détecter si stdin est connecté à un terminal ou à un tuyau, fournissant des informations précieuses pour contrôler le comportement du programme en fonction de la source d'entrée.

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!

Déclaration:
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