Windows와 Linux의 파이프의 차이점은 무엇입니까?
-
08-07-2019 - |
문제
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로 출력이 더 빨리 나타납니다.