ホームページ >バックエンド開発 >C++ >C、C、Qt で stdin がターミナルであるかパイプであるかを検出するにはどうすればよいですか?

C、C、Qt で stdin がターミナルであるかパイプであるかを検出するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-09 14:32:12341ブラウズ

How Can I Detect Whether stdin is a Terminal or a Pipe in C, C  , and Qt?

C、C、および Qt の stdin 型の検出

ターミナルで引数なしで「python」を実行すると、Python 対話型シェルは次のようになります。が発売されました。ただし、ターミナルから「cat | python」を実行すると対話モードは有効にならず、stdin がパイプに接続されていることを示します。この記事では、 isatty 関数を使用して C、C、Qt の stdin 型を検出する方法について説明します。

関数の概要

stdio.h の isatty 関数は、ファイル記述子は端末に接続されます。 fileno(stdin) に適用すると、stdin が端末 (例: コンソールまたは端末エミュレーター) であるかどうか (例: ファイルまたはパイプ) がチェックされます。

C / C Example

C または C では、次のコードを使用して標準入力を検出しますtype:

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

Qt の例

Qt は、QIODevice を継承する KStdin クラスを提供します。これには、stdin が端末に接続されているかどうかを確認するために使用できる is Terminal() メソッドがあります。

#include <QStdin>

int main() {
  KStdin stdinDevice;
  if (stdinDevice.isTerminal())
    qDebug() << "stdin is a terminal";
  else
    qDebug() << "stdin is a file or a pipe";
  return 0;
}

C または C の isatty または Qt の KStdin を利用することで、stdin が接続されているかどうかを検出できます。端子またはパイプに接続され、入力ソースに基づいてプログラムの動作を制御するための貴重な情報を提供します。

以上がC、C、Qt で stdin がターミナルであるかパイプであるかを検出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。