Heim >Backend-Entwicklung >C++ >Wie kann ich feststellen, ob die Standardeingabe (stdin) ein Terminal oder eine Pipe in C oder C ist?

Wie kann ich feststellen, ob die Standardeingabe (stdin) ein Terminal oder eine Pipe in C oder C ist?

Linda Hamilton
Linda HamiltonOriginal
2024-12-05 04:26:10966Durchsuche

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

Terminal- oder Rohrverbindung in C oder C bestimmen

Beim Ausführen eines Programms ist es oft notwendig zu bestimmen, ob die Standardeingabe (stdin ) ist an eine Klemme oder ein Rohr angeschlossen. Diese Unterscheidung ist entscheidend, um die Art der Eingabe zu verstehen, die das Programm empfängt, und um das Verhalten entsprechend anzupassen.

Problemanalyse

Wie beobachtet, verhält sich „Python“ unterschiedlich, je nachdem, ob Der Aufruf erfolgt über ein Terminal oder über eine Pipe. Dies zeigt an, dass das Programm das Vorhandensein oder Fehlen einer Terminalverbindung erkennt.

C- oder C-Erkennungslösung

In C oder C kann die Funktion isatty verwendet werden Bestimmen Sie, ob der angegebene Dateideskriptor auf ein Terminal verweist oder nicht. Es benötigt einen Dateideskriptor als Argument, der normalerweise fileno(stdin) für stdin ist.

Beispielcode

Hier ist ein Beispiel für die Verwendung von isatty in C oder 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;
}

Unter Windows werden den Funktionen isatty und fileno Unterstriche vorangestellt, sodass die Code wird zu:

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

Das obige ist der detaillierte Inhalt vonWie kann ich feststellen, ob die Standardeingabe (stdin) ein Terminal oder eine Pipe in C oder C ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn