2012-03-07 1 views
4

하나의 프로세스가 명명 된 파이프를 통해 다른 프로세스에 기록됩니다. 판독기 프로세스가 오작동하고 판독을 위해 파이프를 열지 않을 가능성이 있습니다. 그런 일이 생기면 잘 작동하는 작성자 프로세스가 open() 호출에 멈추게됩니다. 필자가 파이프를 열 때 타임 아웃 할 수 있기를 바랍니다. 그러면 리더가 시간의 끝을 열지 않은 경우 클린업하고 실행을 계속할 수 있습니다. nonblocking open()은 즉시 오류를 반환합니다. 이 옵션의 경우 :Linux : 쓰기 위해 명명 된 파이프를 열 때 시간 초과가 발생했습니다.

답변

3

걸려 않도록해야합니다 귀하의 작가 프로세스를 읽기 - 쓰기 모드에서 파이프를 열어에서

+0

고마워, 나는 소켓을 설치하지 않아도되기를 바랬지 만 당신의 점수는 절대적으로 유효합니다. – gimmeamilk

0

는이 같은 시나리오에 대한 유닉스 도메인 소켓을 사용합니다. FIFO의 의미론 때문에이 작업을 수행하는 것은 어색한 방법이며 어쨌든 열린 상태에서 문제가 발생할 가능성이 높습니다. 그리고이 디자인은 필요하다면 한 클라이언트 이상으로 확장되지 않습니다. 단기간에 FIFO에 대한 의지를 집행 할 수는 있지만, 후회할 것으로 의심됩니다.

소켓은 훨씬 자연스럽게 적합합니다. 청취 소켓은 기존 폴링(), 클라이언트 연결, 작성자의 데이터 덤프, 양쪽 연결 끊기 등에 잘 맞습니다. 모든 사람이 행복합니다. 소란스럽지 마시고.

+0

내가 그렇게하면 다른 프로세스가 읽기 위해 열렸을 때 어떻게 알 수 있습니까? – gimmeamilk

+0

넌 블로킹 오픈 리턴은 어떤 에러입니까? 읽기 - 쓰기 모드로 비 차단 모드를 시도 했습니까? 파이프가 쓰기 준비가되면 (선택 또는 폴링을 사용하여) 테스트 할 수 있어야합니다. 그렇다면 클라이언트가 다른 쪽 끝으로 연결되었음을 의미합니다. – sirgeorge

+1

poll()은 다른 쪽 끝이 아직 열리지 않은 경우에도 RW 모드로 열면 즉시 writeable을 반환합니다. – gimmeamilk