Я написал две короткие программы, которые используют анонимные каналы для общения. Родительский процесс разделяет дескрипторы канала, устанавливая стандартные дескрипторы ввода-вывода для дочернего элемента:
// -- Set STARTUPINFO for the spawned process -------------------------
ZeroMemory(&m_ChildSI, sizeof(STARTUPINFO));
GetStartupInfo(&m_ChildSI);
m_ChildSI.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
m_ChildSI.wShowWindow = SW_HIDE;
m_ChildSI.hStdError = m_pipeChild.WritePipeHandle();
m_ChildSI.hStdOutput = m_pipeChild.WritePipeHandle();
m_ChildSI.hStdInput = m_pipeParent.ReadPipeHandle();
Ребенок получает дескриптор канала чтения с вызовом GetStdHandle :
hReadPipe = GetStdHandle(STD_INPUT_HANDLE)
Мой вопрос:
Дескрипторы канала создаются родительским процессом, который вызывает CloseHandle () для них, как только родитель и потомок закончили связь.
Должен ли ребенок также вызывать CloseHandle ()? Я думал, что, поскольку это стандартные дескрипторы ввода-вывода, они будут автоматически освобождены при сворачивании процесса.
спасибо!