익명 파이프 작업
CreatePipe 함수는 익명 파이프를 만들고 파이프에 대한 읽기 핸들과 파이프에 대한 쓰기 핸들이라는 두 개의 핸들을 반환합니다. 읽기 핸들은 파이프에 대한 읽기 전용 액세스 권한을 가지며 쓰기 핸들에는 파이프에 대한 쓰기 전용 액세스 권한이 있습니다. 파이프를 사용하여 통신하려면 파이프 서버가 파이프 핸들을 다른 프로세스에 전달해야 합니다. 일반적으로 상속을 통해 수행됩니다. 즉, 프로세스를 통해 자식 프로세스에서 핸들을 상속할 수 있습니다. 또한 프로세스는 DuplicateHandle 함수를 사용하여 파이프 핸들을 복제하고 DDE 또는 공유 메모리와 같은 일종의 프로세스 간 통신을 사용하여 관련 없는 프로세스로 보낼 수도 있습니다.
파이프 서버는 클라이언트가 익명 파이프를 사용하여 정보를 보내거나 정보를 수신해야 하는지에 따라 읽기 핸들 또는 쓰기 핸들을 파이프 클라이언트에 보낼 수 있습니다. 파이프에서 읽으려면 ReadFile 함수에 대한 호출에서 파이프의 읽기 핸들을 사용합니다. ReadFile 호출은 다른 프로세스가 파이프에 기록되면 를 반환합니다. ReadFile 호출은 파이프에 대한 모든 쓰기 핸들이 닫혔거나 읽기 작업이 완료되기 전에 오류가 발생하는 경우에도 반환할 수 있습니다.
파이프에 쓰려면 WriteFile 함수에 대한 호출에서 파이프의 쓰기 핸들을 사용합니다. WriteFile 호출은 지정된 바이트 수를 파이프에 기록하거나 오류가 발생할 때까지 반환되지 않습니다. 파이프 버퍼가 가득 차서 쓸 바이트가 더 있는 경우 WriteFile 은 다른 프로세스가 파이프에서 읽을 때까지 반환되지 않으므로 더 많은 버퍼 공간을 사용할 수 있습니다. 파이프 서버는 CreatePipe를 호출할 때 파이프의 버퍼 크기를 지정합니다.
비동기(겹치는) 읽기 및 쓰기 작업은 익명 파이프에서 지원되지 않습니다. 즉, 익명 파이프와 함께 ReadFileEx 및 WriteFileEx 함수를 사용할 수 없습니다. 또한 이러한 함수를 익명 파이프와 함께 사용할 때 ReadFile 및 WriteFile의 lpOverlapped 매개 변수는 무시됩니다.
익명 파이프는 읽기 및 쓰기 모두의 모든 파이프 핸들이 닫혀 있을 때까지 존재합니다. 프로세스는 CloseHandle 함수를 사용하여 파이프 핸들을 닫을 수 있습니다. 프로세스가 종료되면 모든 파이프 핸들도 닫힙니다.
익명 파이프는 고유한 이름의 명명된 파이프를 사용하여 구현됩니다. 따라서 명명된 파이프에 대한 핸들이 필요한 함수에 익명 파이프에 핸들을 전달할 수 있습니다.