2009-09-01 10 views
1

조각 된 메시지가 명명 된 파이프를 통해 보내지는 것을 방지하려면 어떻게해야합니까? while 루프가 오류를 확인하거나 연결을 끊는 것이 간단합니까? 아니면 더 많은 것이 있습니까?
(winapi를 사용하여 C에서 명명 된 파이프)파이프가 조각난 메시지를 읽을 수 있도록 허용

감사합니다. - 전체 메시지에 대한 단일 쓰기

  1. 메시지 길이 당신은 원자 적으로 메시지를 작성해야합니다

  • 읽기 길이 :

  • 답변

    2

    메시지가 조각난 할 수 있는지 여부에 영향을 두 가지 요소가 있습니다.

    메시지가 파이프 버퍼 크기 (매우 클 필요는 없음)보다 긴 경우 메시지가 일련의 비트로 조각화됩니다. 첫 번째는 버퍼를 채울 것이고, 다음 몇 가지는 버퍼 크기가 될 것이고, 마지막은 남은 것입니다.

    메시지도 자동으로 읽어야합니다. 즉, 한 번에 전체 메시지를 읽으려면 읽음이 충분히 커야합니다. 단일 리더 프로세스 (또는 스레드)가있는 경우 메시지 시작 부분부터 2 바이트 길이를 읽은 다음 원자의 나머지 부분을 읽을 수 있습니다. (4 바이트 길이는 과도합니다. 최대 버퍼 크기는 일반적으로 시스템에 따라 다르지만 512-5120 종류의 범위입니다.)

    복잡하게 작성하는 프로세스가있는 경우 다른 프로세스는 특대 메시지가 전송되는 동안 파이프로 데이터를 인터리브 할 수 있습니다.

    엄밀히 말하면 이것은 유닉스 기반 시스템에 적용됩니다. 그러나, WinAPI가이 영역의 유닉스를 가깝게 반영한다는 것을 이해합니다.

    관련 문제