>백엔드 개발 >C++ >C, C, Qt에서 stdin이 터미널인지 파이프인지 어떻게 알 수 있나요?

C, C, Qt에서 stdin이 터미널인지 파이프인지 어떻게 알 수 있나요?

Linda Hamilton
Linda Hamilton원래의
2024-12-09 14:32:12344검색

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 예시

C 또는 C에서는 다음 코드를 사용하여 stdin을 감지합니다. 유형:

#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이 터미널에 연결되어 있는지 확인하는 데 사용할 수 있는 isTerminal() 메서드가 있습니다.

#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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.