Maison >développement back-end >C++ >Comment puis-je déterminer si l'entrée standard (stdin) est un terminal ou un tuyau en C ou C ?

Comment puis-je déterminer si l'entrée standard (stdin) est un terminal ou un tuyau en C ou C ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-05 04:26:10939parcourir

How Can I Determine if Standard Input (stdin) is a Terminal or a Pipe in C or C  ?

Détermination d'une connexion de terminal ou de tuyau en C ou C

Lors de l'exécution d'un programme, il est souvent nécessaire de déterminer si l'entrée standard (stdin ) est connecté à un terminal ou à une canalisation. Cette distinction est cruciale pour comprendre le type d'entrée que le programme reçoit et ajuster le comportement en conséquence.

Analyse du problème

Comme observé, "python" se comporte différemment selon que il est appelé depuis un terminal ou via un tube. Ceci indique que le programme détecte la présence ou l'absence d'une connexion de terminal.

Solution de détection C ou C

En C ou C , la fonction isatty peut être utilisée pour déterminer si le descripteur de fichier spécifié fait référence à un terminal ou non. Il prend un descripteur de fichier comme argument, qui est généralement fileno(stdin) pour stdin.

Exemple de code

Voici un exemple d'utilisation d'isatty en C ou C :

#include <stdio.h>
#include <io.h> // For _isatty and _fileno on Windows

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

  return 0;
}

Sous Windows, les fonctions isatty et fileno sont préfixées par des traits de soulignement, donc le code devient :

#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;
}

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