Я использую CreatePipe для создания дескрипторов, которые я затем передаю при запуске дочернего процесса.
Дочерний процесс записывает двоичную информацию в свой стандарт, который перенаправляется в созданный мною канал.
Однако, когда дело доходит до написания числа «10», все идет наперекосяк, и я получаю слишком много символов вывода - я предполагаю, что это потому, что поток открыт в текстовом режиме, и он автоматически добавляет 13.
Есть ли способ в Win32, что я могу взять HANDLE, возвращенный из CreatePipe, и изменить режим потока на двоичный, так же, как я мог бы использовать функцию _setmode, если бы у меня был FILE *? Или есть способ перевести его дескриптор в файл *, чтобы я мог использовать _setmode?
Пример кода:
HANDLE hOutputReadTmp,hInputWriteTmp;
SECURITY_ATTRIBUTES sa;
bool Binary = true;
// Set up the security attributes struct.
sa.nLength= sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
if (!CreatePipe(&hInputRead,&hInputWriteTmp,&sa,0))
{
Error = "Unable to Create Input Pipe";
return false;
};
if (Binary == true)
{
//Put a magic something here to change the hInputRead stream to Binary.
//_setmode(_fileno(hInputRead,_O_BINARY);
}
EDIT
Вероятно, это больше связано с тем, что CHILD PROCESS записывает в stdout текстовый поток. Дайте мне минуту взглянуть на это, и я могу вернуться и удалить весь этот пост!