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 구조체에 대한 포인터입니다. lpPipeAttributes가 NULL이면 핸들을 상속할 수 없습니다.
구조체의 lpSecurityDescriptor 멤버는 새 파이프에 대한 보안 설명자를 지정합니다. lpPipeAttributes가 NULL이면 파이프는 기본 보안 설명자를 가져옵니다. 파이프에 대한 기본 보안 설명자의 ACL은 작성자의 기본 또는 가장 토큰에서 가져옵니다.
[in] nSize
파이프의 버퍼 크기(바이트)입니다. 크기는 제안일 뿐입니다. 시스템은 값을 사용하여 적절한 버퍼링 메커니즘을 계산합니다. 이 매개 변수가 0이면 시스템에서 기본 버퍼 크기를 사용합니다.
반환 값
함수가 성공하면 반환 값이 0이 아닙니다.
함수가 실패하면 반환 값은 0입니다. 확장 오류 정보를 가져오려면 GetLastError를 호출합니다.
설명
CreatePipe 는 지정된 파이프 크기를 스토리지 버퍼에 할당하여 파이프를 만듭니다. 또한 CreatePipe 는 프로세스에서 ReadFile 및 WriteFile 함수에 대한 후속 호출에서 버퍼에서 읽고 쓰는 데 사용하는 핸들을 만듭니다.
파이프에서 읽기를 위해 프로세스는 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 |