Win32 Stream Handles - Переход в двоичный режим - PullRequest
2 голосов
/ 22 февраля 2012

Я использую 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 текстовый поток. Дайте мне минуту взглянуть на это, и я могу вернуться и удалить весь этот пост!

...