문제

Windows와 Linux의 파이프의 차이점은 무엇입니까?

도움이 되었습니까?

해결책

내가 아는 한 가지 차이점은 Linux의 명명 된 파이프가 파일 시스템의 실제 항목이라는 것입니다 (디렉토리 목록에서 볼 수 있고 특수 유형이 있습니다). ". pipe "경로를 통해 모두 액세스합니다.

둘째, Linux에서는 표준 파일 IO 메소드를 사용하여 다른 파일 인 것처럼 파이프에서 쓰기/읽을 수 있습니다. Windows에서는 Win32 API의 일부인 특수 '파이프'기능을 사용해야합니다.

Linux의 방법을 더 좋아합니다. 원하는 앱과 함께 파이프를 사용할 수 있기 때문입니다. 예 :

mkfifo pipe.wav
decodeMP3 song.mp3 --out pipe.wav &
encodeAVI video.mpeg pipe.wav --out video.avi

이를 통해 MP3 디코더의 출력을 먼저 MP3를 디스크의 WAV 파일로 디코딩하는 대신 비디오 디코더에 직접 파이프 할 수 있습니다. 듀얼 코어 CPU가 있으면 편리합니다. 왜냐하면 좋은 속도를 높이기 위해 한 번에 두 작업을 모두 실행하고 있기 때문입니다.

다른 팁

Linux (및 일반적으로 *ix)에서 "모든 것이 파일입니다". 해당 작업이 의미가있는 한 제한없이 파이프와 소켓 및 장치를 읽고 쓰기/찾아 볼 수 있습니다.

Windows는 이러한 다양한 유형의 객체에 대해 훨씬 덜 통일 된 아키텍처를 가지고 있습니다. 세부 사항을 말할 수는 없지만 파이프 버퍼링이 Windows와 Linux간에 상당히 다르다는 것을 알고 있으므로 어려움에 빠질 수 있습니다.

또한 파이프의 일반적인 Unix-Y 사용은 다음과 같습니다. fork() 하위 프로세스를 통해 파이프를 통해 통신합니다 (부모는 한쪽 끝을 열고 아이는 다른 쪽 끝을 엽니 다). 창문에서는 그런 종류의 일이 불가능합니다. IPC 메커니즘은 상당히 다릅니다.

이전 스레드도 참조하십시오.

명명 된 파이프 란 무엇입니까?

내 테이크와 다른 여러 사람들이 포함되어 있습니다.

또 다른 중요한 차이점

창문 아래

A | B | C 

a가 출력이 완료 될 때까지 B는 읽기 시작하지 않으며 B 출력에 대해서도 동일합니다.

*nix는 입력과 출력을 함께 연결하여 C가 B의 출력을 읽을 수 있고 B는 A와 B가 여전히 실행중인 동안 A의 출력을 읽을 수 있습니다.

처리량은 거의 동일하지만 *nix로 출력이 더 빨리 나타납니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top