CreatePipe 함수(namedpipeapi.h)

익명 파이프를 만들고 파이프의 읽기 및 쓰기 끝에 대한 핸들을 반환합니다.

구문

BOOL CreatePipe(
  [out]          PHANDLE               hReadPipe,
  [out]          PHANDLE               hWritePipe,
  [in, optional] LPSECURITY_ATTRIBUTES lpPipeAttributes,
  [in]           DWORD                 nSize
);

매개 변수

[out] hReadPipe

파이프에 대한 읽기 핸들을 수신하는 변수에 대한 포인터입니다.

[out] hWritePipe

파이프에 대한 쓰기 핸들을 수신하는 변수에 대한 포인터입니다.

[in, optional] lpPipeAttributes

반환된 핸들을 자식 프로세스에서 상속할 수 있는지 여부를 결정하는 SECURITY_ATTRIBUTES 구조체에 대한 포인터입니다. lpPipeAttributesNULL이면 핸들을 상속할 수 없습니다.

구조체의 lpSecurityDescriptor 멤버는 새 파이프에 대한 보안 설명자를 지정합니다. lpPipeAttributesNULL이면 파이프는 기본 보안 설명자를 가져옵니다. 파이프에 대한 기본 보안 설명자의 ACL은 작성자의 기본 또는 가장 토큰에서 가져옵니다.

[in] nSize

파이프의 버퍼 크기(바이트)입니다. 크기는 제안일 뿐입니다. 시스템은 값을 사용하여 적절한 버퍼링 메커니즘을 계산합니다. 이 매개 변수가 0이면 시스템에서 기본 버퍼 크기를 사용합니다.

반환 값

함수가 성공하면 반환 값이 0이 아닙니다.

함수가 실패하면 반환 값은 0입니다. 확장 오류 정보를 가져오려면 GetLastError를 호출합니다.

설명

CreatePipe 는 지정된 파이프 크기를 스토리지 버퍼에 할당하여 파이프를 만듭니다. 또한 CreatePipe프로세스에서 ReadFileWriteFile 함수에 대한 후속 호출에서 버퍼에서 읽고 쓰는 데 사용하는 핸들을 만듭니다.

파이프에서 읽기를 위해 프로세스는 ReadFile 함수 호출에서 읽기 핸들을 사용합니다. ReadFile 은 다음 중 하나가 true이면 를 반환합니다. 파이프의 쓰기 끝에서 쓰기 작업이 완료되거나 요청된 바이트 수가 읽혀지거나 오류가 발생합니다.

프로세스에서 WriteFile 을 사용하여 익명 파이프에 쓰는 경우 모든 바이트가 기록될 때까지 쓰기 작업이 완료되지 않습니다. 모든 바이트를 쓰기 전에 파이프 버퍼가 가득 차면 다른 프로세스 또는 스레드가 ReadFile 을 사용하여 더 많은 버퍼 공간을 사용할 수 있도록 할 때까지 WriteFile 이 반환되지 않습니다.

익명 파이프는 고유한 이름의 명명된 파이프를 사용하여 구현됩니다. 따라서 명명된 파이프에 대한 핸들이 필요한 함수에 익명 파이프에 대한 핸들을 전달할 수 있습니다.

CreatePipe가 실패하면 출력 매개 변수의 내용이 확정되지 않습니다. 이 이벤트의 내용에 대해 가정해서는 안 됩니다.

파이프에서 사용하는 리소스를 해제하려면 애플리케이션은 더 이상 필요하지 않을 때 항상 핸들을 닫아야 하며, CloseHandle 함수를 호출하거나 instance 핸들과 연결된 프로세스가 종료될 때 수행됩니다. 파이프의 instance 연결된 핸들이 둘 이상 있을 수 있습니다. 명명된 파이프의 instance 대한 마지막 핸들이 닫혀 있으면 파이프의 instance 항상 삭제됩니다.

예제

예제는 리디렉션된 입력 및 출력을 사용하여 자식 프로세스 만들기를 참조하세요.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000 Professional [데스크톱 앱 | UWP 앱]
지원되는 최소 서버 Windows 2000 Server [데스크톱 앱 | UWP 앱]
대상 플랫폼 Windows
헤더 namedpipeapi.h
라이브러리 Kernel32.lib
DLL Kernel32.dll

참고 항목

파이프 함수

파이프 개요

ReadFile

SECURITY_ATTRIBUTES

WriteFile