Heim >Backend-Entwicklung >C++ >Ist stdin ein Terminal oder eine Pipe?

Ist stdin ein Terminal oder eine Pipe?

Susan Sarandon
Susan SarandonOriginal
2024-12-29 16:28:16426Durchsuche

Is stdin a Terminal or a Pipe?

Bestimmen der Art der Standardeingabe: Terminal oder Pipe

In verschiedenen Szenarien kann es hilfreich sein, zu unterscheiden, ob die Standardeingabe (stdin) stellt ein Terminal oder eine Pipe dar. Dieser Unterschied wird in der Divergenz im Verhalten deutlich, das Python zeigt, wenn es ohne Argumente vom Terminal aufgerufen wird, verglichen mit der Bereitstellung von Eingaben über eine Pipeline. Um eine solche Erkennung zu reproduzieren, bieten verschiedene Programmiersprachen, darunter C, C und Qt, unterschiedliche Ansätze.

Unix-Ansatz: isatty

Für C und C das Unix Der Systemaufruf isatty() bietet eine Möglichkeit, die Natur von stdin festzustellen. Diese Funktion verwendet als Parameter eine Ganzzahl, die den Dateideskriptor der abgefragten Datei darstellt. Für stdin wird dies normalerweise mit dem Ausdruck fileno(stdin) ermittelt. Wenn der Dateideskriptor einem Terminal entspricht, gibt isatty() einen Wert ungleich Null zurück, was darauf hinweist, dass stdin ein Terminal ist. Umgekehrt zeigt ein Nullwert an, dass stdin kein Terminal ist, sondern wahrscheinlich eine Pipe oder Datei darstellt.

Beispiel:

#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");

Qt-Ansatz: QTextStream

Für Qt ist aufgrund des objektorientierten Ansatzes des Frameworks eine andere Methode erforderlich. Qt verwendet einen QTextStream zur Interaktion mit stdin, der verwendet werden kann, um zu bestimmen, ob stdin von einem Terminal stammt oder nicht. Eine QTextStream-Instanz wird durch den Aufruf von QTextStream(stdin) mit stdin als Argument erstellt. Der folgende Code demonstriert diesen Ansatz:

QTextStream qin(stdin);
bool isTerminal = qin.device()->isInteractive();

In diesem Fall gibt isInteractive true zurück, wenn stdin ein Terminal ist, und false, wenn es sich um eine Pipe oder Datei handelt.

Das obige ist der detaillierte Inhalt vonIst stdin ein Terminal oder eine Pipe?. 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