>백엔드 개발 >C++ >C 또는 C에서 표준 입력(stdin)이 터미널인지 파이프인지 어떻게 확인할 수 있습니까?

C 또는 C에서 표준 입력(stdin)이 터미널인지 파이프인지 어떻게 확인할 수 있습니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-05 04:26:10982검색

How Can I Determine if Standard Input (stdin) is a Terminal or a Pipe in C or C  ?

C 또는 C에서 터미널 또는 파이프 연결 확인

프로그램을 실행할 때 표준 입력(stdin)인지 확인해야 하는 경우가 종종 있습니다. )은 터미널이나 파이프에 연결됩니다. 이러한 구별은 프로그램이 수신하는 입력 유형을 이해하고 이에 따라 동작을 조정하는 데 중요합니다.

문제 분석

관찰한 바와 같이 "python"은 입력 유형에 따라 다르게 동작합니다. 터미널이나 파이프를 통해 호출됩니다. 이는 프로그램이 터미널 연결 유무를 감지한다는 것을 나타냅니다.

C 또는 C 감지 솔루션

C 또는 C에서 isatty 함수를 사용하여 다음을 수행할 수 있습니다. 지정된 파일 설명자가 터미널을 참조하는지 여부를 확인합니다. 이는 일반적으로 stdin의 경우 fileno(stdin)인 파일 설명자를 인수로 사용합니다.

예제 코드

다음은 C에서 isatty를 사용하는 방법에 대한 예입니다. 또는 C :

#include <stdio.h>
#include <io.h> // For _isatty and _fileno on Windows

int main() {
  if (isatty(fileno(stdin))) {
    printf("stdin is a terminal\n");
  } else {
    printf("stdin is a file or a pipe\n");
  }

  return 0;
}

Windows에서는 isatty 및 fileno 함수 앞에 다음이 붙습니다. 밑줄이 있으므로 코드는 다음과 같습니다.

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

위 내용은 C 또는 C에서 표준 입력(stdin)이 터미널인지 파이프인지 어떻게 확인할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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