> 백엔드 개발 > C++ > stdin은 터미널인가요, 아니면 파이프인가요?

stdin은 터미널인가요, 아니면 파이프인가요?

Susan Sarandon
풀어 주다: 2024-12-29 16:28:16
원래의
437명이 탐색했습니다.

Is stdin a Terminal or a Pipe?

표준 입력의 특성 결정: 터미널 또는 파이프

다양한 시나리오에서 표준 입력(stdin)인지 여부를 구별하는 것이 도움이 될 수 있습니다. 터미널이나 파이프를 나타냅니다. 이러한 구별은 파이프 입력이 제공될 때와 비교하여 터미널에서 인수 없이 호출될 때 Python이 나타내는 동작의 차이에서 분명해집니다. 이러한 감지를 재현하기 위해 C, C 및 Qt를 포함한 다양한 프로그래밍 언어가 다양한 접근 방식을 제공합니다.

Unix 접근 방식: isatty

C 및 C의 경우 Unix는 시스템 호출 isatty()는 stdin의 특성을 확인하는 수단을 제공합니다. 이 함수는 쿼리되는 파일의 파일 설명자를 나타내는 정수를 매개변수로 사용합니다. stdin의 경우 이는 일반적으로 fileno(stdin) 표현식을 사용하여 얻습니다. 파일 설명자가 터미널에 해당하는 경우 isatty()는 0이 아닌 값을 반환하여 stdin이 터미널임을 나타냅니다. 반대로, 0 값은 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿