파이프와 스트림의 차이점은 무엇입니까?

파이프와 스트림의 차이점은 무엇입니까?

파이프와 스트림에 대해 읽었지만 구현 방법이 여전히 혼란스럽습니다.

프로그램은 키보드가 데이터를 보내는 "표준 입력" 스트림(stdin)에서 데이터를 시작하고 읽습니다.

내 질문은 파이프와 어떻게 다릅니 까? 파이프를 사용하면 하나의 프로세스가 파이프로 데이터를 보내고 다른 프로세스가 파이프에서 데이터를 읽을 수 있습니다.

키보드를 누르면 데이터가 표준 입력으로 전송되고 프로그램은 동일한 스트림에서 데이터를 읽습니다.

데이터가 스트림으로 전송되면 파이프처럼 "읽기" 작업이 수행됩니다.

이 스트림은 파이프로 연결되어 있습니까?

답변1

Unix 터미널 I/O는 전통적으로 일종의 I/O로 구현되었습니다.대기줄. 이전 커널은 clist를 사용합니다. V8 유닉스 사용개울. 대부분의 경우 clist와 스트림은 사용자 프로세스(특히 파일 설명자)와 문자 장치 드라이버(예: 직렬 포트 또는 ptys) 간의 부분 링크를 구현하는 데 사용됩니다.

파이프도 대기열이지만 사용자 프로세스(특히 파일 설명자 쌍)를 연결합니다. 파이프는 소켓, 특수 유형의 파일, 심지어 STREAMS(STREAMS는 V8 스트림의 파생물)를 포함하여 다양한 방법으로 구현될 수 있습니다.

따라서 스트림과 파이프는 모두 대기열의 구현이지만 사용법이 다릅니다.

답변2

이는 기술적인 관점에서 완전히 정확하지 않을 수 있지만 혼란을 해결하는 데 도움이 될 수 있습니다. 나는 스트림을 STDIN, STDOUT, STDERR과 같이 프로그램에 내장된 것으로 생각하는 경향이 있지만 파이프는 프로그램 외부에 있습니다. 예를 들어 cat foo.txt | grep bar, 명령에서 cat명령은 기본 STDOUT으로 전송된 다음 외부 파이프를 통해 grep기본 STDIN에 연결됩니다.

관련 정보