다음을 통해 공유


명명된 파이프 열기 모드

파이프 서버는 CreateNamedPipe 함수의 dwOpenMode 매개 변수에서 파이프 액세스, 겹침 및 쓰기 모드를 지정합니다. 파이프 클라이언트는 CreateFile 함수를 사용하여 파이프 핸들에 대해 이러한 열린 모드를 지정할 수 있습니다.

액세스 모드

파이프 액세스 모드 설정은 파이프 서버의 핸들과 연결된 읽기 또는 쓰기 액세스를 지정하는 것과 같습니다. 다음 표에서는 CreateNamedPipe를 사용하여 지정할 수 있는 각 액세스 모드에 해당하는 제네릭 액세스 권한을 보여줍니다.

액세스 모드 동등한 일반 액세스 권한
PIPE_ACCESS_INBOUND GENERIC_READ
PIPE_ACCESS_OUTBOUND GENERIC_WRITE
PIPE_ACCESS_DUPLEX GENERIC_READ | GENERIC_WRITE

 

파이프 서버가 PIPE_ACCESS_INBOUND 사용하여 파이프를 만드는 경우 파이프는 파이프 서버에 대해 읽기 전용이고 파이프 클라이언트의 경우 쓰기 전용입니다. 파이프 서버가 PIPE_ACCESS_OUTBOUND 사용하여 파이프를 만드는 경우 파이프는 파이프 서버에 대해 쓰기 전용이고 파이프 클라이언트의 경우 읽기 전용입니다. PIPE_ACCESS_DUPLEX 사용하여 만든 파이프는 파이프 서버와 파이프 클라이언트 모두에 대해 읽기/쓰기가 가능합니다.

CreateFile을 사용하여 명명된 파이프에 연결하는 파이프 클라이언트는 파이프 서버에서 지정한 액세스 모드와 호환되는 dwDesiredAccess 매개 변수에서 액세스 권한을 지정해야 합니다. 예를 들어 클라이언트는 파이프 서버가 PIPE_ACCESS_OUTBOUND 사용하여 만든 파이프에 대한 핸들을 열려면 GENERIC_READ 액세스를 지정해야 합니다. 액세스 모드는 파이프의 모든 인스턴스에 대해 동일해야 합니다.

읽기 모드 또는 차단 모드와 같은 파이프 특성을 읽으려면 파이프 핸들에 FILE_READ_ATTRIBUTES 액세스 권한이 있어야 합니다. 파이프 특성을 작성하려면 파이프 핸들에 FILE_WRITE_ATTRIBUTES 액세스 권한이 있어야 합니다. 이러한 액세스 권한은 파이프에 적합한 일반 액세스 권한(읽기 전용 파이프의 경우 FILE_WRITE_ATTRIBUTES GENERIC_READ 사용) 또는 쓰기 전용 파이프의 FILE_READ_ATTRIBUTES GENERIC_WRITE 결합할 수 있습니다. 이러한 방식으로 액세스 권한을 제한하면 파이프에 대한 보안이 향상됩니다.

겹치는 모드

겹치는 모드에서는 긴 읽기, 쓰기 및 연결 작업을 수행하는 함수가 즉시 반환될 수 있습니다. 이렇게 하면 백그라운드에서 시간이 많이 걸리는 작업이 실행되는 동안 스레드가 다른 작업을 수행할 수 있습니다. 겹치는 모드를 지정하려면 FILE_FLAG_OVERLAPPED 플래그를 사용합니다. 자세한 내용은 동기 및 겹치는 입력 및 출력을 참조하세요.

CreateFile 함수를 사용하면 파이프 클라이언트가 dwFlagsAndAttributes 매개 변수를 사용하여 파이프 핸들에 대해 겹치는 모드(FILE_FLAG_OVERLAPPED)를 설정할 수 있습니다.

Write-Through 모드

FILE_FLAG_WRITE_THROUGH 사용하여 쓰기 모드를 지정합니다. 이 모드는 다른 컴퓨터의 파이프 클라이언트와 파이프 서버 간의 바이트 형식 파이프에 대한 쓰기 작업에만 영향을 줍니다. 쓰기 모드에서 명명된 파이프에 쓰는 함수는 데이터가 네트워크를 통해 원격 컴퓨터의 파이프 버퍼로 전송될 때까지 반환되지 않습니다. 쓰기 모드는 모든 쓰기 작업에 동기화가 필요한 애플리케이션에 유용합니다.

쓰기 모드를 사용하도록 설정하지 않으면 최소 바이트 수가 누적되거나 최대 기간이 경과할 때까지 데이터를 버퍼링하여 네트워크 작업의 효율성을 향상시킵니다. 버퍼링을 사용하면 시스템에서 여러 쓰기 작업을 단일 네트워크 전송으로 결합할 수 있습니다. 즉, 시스템이 아웃바운드 버퍼에 데이터를 배치한 후 시스템이 네트워크를 통해 데이터를 전송하기 전에 쓰기 작업을 성공적으로 완료할 수 있습니다.

CreateFile 함수를 사용하면 파이프 클라이언트가 dwFlagsAndAttributes 매개 변수를 사용하여 파이프 핸들에 대한 쓰기 모드(FILE_FLAG_WRITE_THROUGH)를 설정할 수 있습니다. 파이프 핸들을 만든 후에는 파이프 핸들의 쓰기 모드를 변경할 수 없습니다. 동일한 파이프 instance 서버 및 클라이언트 핸들에 대해 쓰기 모드가 다를 수 있습니다.

파이프 클라이언트는 SetNamedPipeHandleState 함수를 사용하여 쓰기 모드가 비활성화된 파이프에 대한 전송 전 바이트 수와 제한 시간을 제어할 수 있습니다. 읽기 전용 파이프의 경우 파이프 핸들을 GENERIC_READ FILE_WRITE_ATTRIBUTES 액세스 권한으로 열어야 합니다.