ホームページ > バックエンド開発 > C++ > stdin はターミナルですか、それともパイプですか?

stdin はターミナルですか、それともパイプですか?

Susan Sarandon
リリース: 2024-12-29 16:28:16
オリジナル
442 人が閲覧しました

Is stdin a Terminal or a Pipe?

標準入力の性質の決定: 端子かパイプ

さまざまなシナリオで、標準入力 (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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート