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_WRITE
와 GENERIC_READ
를 OR로 설정합니다.
이상.
Reference
이 문제에 관하여(Windows 명명된 파이프에서 통신 방향별 설정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/yudai09/items/4f55f86b55dbcaf2b71e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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_WRITE
와 GENERIC_READ
를 OR로 설정합니다.이상.
Reference
이 문제에 관하여(Windows 명명된 파이프에서 통신 방향별 설정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yudai09/items/4f55f86b55dbcaf2b71e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)