Heim >Backend-Entwicklung >C++ >Ist stdin ein Terminal oder eine 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!