標準入力の性質の決定: 端子かパイプ
さまざまなシナリオで、標準入力 (stdin) かどうかを区別すると有益な場合があります。は端子またはパイプを表します。この違いは、パイプ入力が提供された場合と比較して、ターミナルから引数なしで Python が呼び出された場合に Python が示す動作の相違から明らかです。このような検出を再現するために、C、C、Qt などのさまざまなプログラミング言語がさまざまなアプローチを提供しています。
Unix アプローチ: isatty
C および C の場合、Unixシステムコール isatty() は、stdin の性質を確認する手段を提供します。この関数は、クエリ対象のファイルのファイル記述子を表す整数をパラメータとして受け取ります。 stdin の場合、これは通常、式 fileno(stdin) を使用して取得されます。ファイル記述子が端末に対応する場合、isatty() は stdin が端末であることを示すゼロ以外の値を返します。逆に、ゼロ値は stdin が端末ではなく、パイプまたはファイルを表す可能性が高いことを示します。
例:
#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 アプローチ: QTextStream
Qt の場合、フレームワークがオブジェクト指向であるため、別のメソッドが必要です アプローチ。 Qt は QTextStream を使用して stdin と対話します。これを使用して、stdin が端末からのものであるかどうかを判断できます。 QTextStream インスタンスは、引数として stdin を指定して QTextStream(stdin) を呼び出すことによって作成されます。次のコードは、このアプローチを示しています。
QTextStream qin(stdin); bool isTerminal = qin.device()->isInteractive();
この例では、isInteractive は、stdin が端末の場合は true を返し、パイプまたはファイルの場合は false を返します。
以上がstdin はターミナルですか、それともパイプですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。