Windows 명명된 파이프에서 통신 방향별 설정

1611 단어 Windows

개요



Windows의 명명된 파이프는 통신 방향을 INBOUND, OUTBOUND, DUPLEX의 3종류를 설정할 수 있고, 서버와 클라이언트의 설정도 통신 방향으로 다르지만, 이러한 3패턴에 대한 설정 방법을 알기 쉽게 설정한 문헌 찾을 수 없습니다.
거기서, 시도가 조금 고생해 패턴을 이해했으므로, 이 기사에서는 자신의 이해를 정리해 공유하기로 했다. 실수 등이 있으면 꼭 지적해 주셨으면 한다.

상세



3종류의 패턴을 그림에 정리하면 다음과 같이 되었다.

여기서, 서버는 파이프를 작성하는 측, 클라이언트는 서버가 작성한 파이프에 연결하는 측이다. 이하, 각각의 개별 설정 내용을 설명한다.

OUTBOUND의 경우



OUTBOUND는 서버가 파이프에 쓴 데이터를 클라이언트가 받는 일방통행의 통신을 나타낸다.

서버는 CreateNamedPipe()를 호출 할 때 PIPE_ACCESS_OUTBOUND를 설정합니다. 서버는 데이터를 읽지 않으므로 READMODE는 설정하지 않습니다.

클라이언트는 CreateFile() 를 호출할 때 GENERIC_READ 를 설정한다. 일반 파일을 읽기 모드로 여는 것과 비슷합니다. 다른 패턴에서는 SetNamedPipeHandleState() 를 호출하지만, 클라이언트가 기입을 실시하지 않는 OUTBOUND의 경우는 불필요하다. (오히려 호출하면 에러가 나온다.)

INBOUND의 경우



INBOUND는 OUTBOUND와는 반대로 클라이언트가 파이프에 쓴 데이터를 서버가 받는 일방통행의 통신을 나타낸다.

서버는 CreateNamedPipe()를 호출 할 때 PIPE_ACCESS_INBOUND를 설정합니다. 서버는 데이터를 읽기 위해 READMODE를 설정합니다.

클라이언트는 CreateFile() 를 호출할 때 GENERIC_WRITE 를 설정한다. INBOUND의 패턴에서는 SetNamedPipeHandleState() 를 호출한다. 이것은 추측이지만 기입하는 측이 어떠한 기입을 실시하는지를 결정하는 설계가 되어 있다고 할지도 모른다.

DUPLEX의 경우



DUPLEX의 설정은 INBOUND와 OUTBOUND의 조합이다. 클라이언트는 GENERIC_WRITEGENERIC_READ를 OR로 설정합니다.

이상.

좋은 웹페이지 즐겨찾기