C Win32流句柄-更改为二进制模式

C Win32流句柄-更改为二进制模式,c,winapi,pipe,C,Winapi,Pipe,我使用创建句柄,然后在启动子进程时传递这些句柄 子进程将二进制信息写入其标准输出,该输出被重定向到我创建的管道中 然而,当涉及到写数字“10”时,事情变得混乱,我得到了太多的输出字符-我假设这是因为流是在文本模式下打开的,它会自动添加一个13 在Win32中,如果我有一个文件*,是否有任何方法可以接受CreatePipe返回的句柄并将流模式更改为二进制,与使用函数_setmode相同?或者有没有办法将句柄转换成文件*这样我就可以使用_setmode 示例代码: 编辑 这可能与将子进程作为文本流写

我使用创建句柄,然后在启动子进程时传递这些句柄

子进程将二进制信息写入其标准输出,该输出被重定向到我创建的管道中

然而,当涉及到写数字“10”时,事情变得混乱,我得到了太多的输出字符-我假设这是因为流是在文本模式下打开的,它会自动添加一个13

在Win32中,如果我有一个文件*,是否有任何方法可以接受CreatePipe返回的句柄并将流模式更改为二进制,与使用函数_setmode相同?或者有没有办法将句柄转换成文件*这样我就可以使用_setmode

示例代码:

编辑


这可能与将子进程作为文本流写入标准输出有关。给我一分钟看看这个,我可能会回来删除整个帖子

还可以发布使其爆炸的子进程代码吗?Win32 API不进行任何文本模式转换。你是如何从管道中读取数据的?是的-我突然想到,可能是子进程在向流中写入数据,好像它是基于文本的。我使用简单的cout.write调用。使用cout调用肯定可以解释这一点。你能不能也发布子进程代码,使其爆炸?Win32 API不进行任何文本模式转换。你是如何从管道中读取数据的?是的-我刚刚想到,可能是子进程在向流中写入数据,好像它是基于文本的,我使用的是简单的cout.write调用。使用cout调用肯定可以解释这一点。
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);
}