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

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

파이프와 스트림에 대해 읽었지만 그것이 어떻게 구현되는지 여전히 혼란스럽습니다.

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

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

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

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

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

답변1

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

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

따라서 스트림과 파이프는 모두 대기열의 구현이지만 서로 다른 상황에서 사용됩니다.

답변2

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

관련 정보