2012-11-13 3 views
7

포크를 사용하지 않고 두 프로세스간에 파이프를 사용할 수 있으며 소켓 예를 들어 파일 설명자를 공유 할 수 있습니까? 다른 솔루션이 필요하지 않습니다. 두 개의 프로세스 사이에 파이프가 필요합니다.포크없이 파이프를 사용할 수 있습니까?

+1

@pst 유닉스 소켓은'connect()','accept()'등 완전히 다른 접근을한다. – glglgl

답변

9

당신은 명명 된 파이프 (FIFO)을 사용할 수 있습니다

당신이 mkfifo <common path>을 할 경우 사용 두 프로세스, 하나는 읽기를하고 하나는 쓰기에이 경로. 그런 다음 정상적인 파이프와 동일한 동작을합니다.

4

가장 간단한 해결 방법은 파일 시스템에 이름이있는 파이프 인 명명 된 파이프를 사용하여 두 프로세스가 모두이를 참조 할 수있게하는 것입니다. 명명 된 파이프는 mkfifo() 호출로 만들어지고 open()으로 열립니다 (한 프로세스는 읽기 용으로, 다른 프로세스는 쓰기 용으로 열어야합니다).

당신 그래서 당신은 어떻게 든 다른 프로세스에 파이프를 생성하는 과정에서 열려있는 파일 설명을 통과해야 너무 관련이없는 두 프로세스와 익명 파이프를 사용할 수 있지만 할 수 있습니다. UNIX 도메인 소켓에서 SCM_RIGHTS 메시지를 사용하여이 작업을 수행 할 수 있지만 UNIX 도메인 소켓이 있으면 파이프 대신 통신 할 수 있습니다. 리눅스 고유의 방법은 두 번째 프로세스가 첫 번째 프로세스에서 파이프의 끝을 나타내는 /proc/<pid>/fd/<fd> 심볼릭 링크에 open()을 사용하는 것이지만, 바로 바로크입니다.

관련 문제