Disable buffering on redirected stdout Pipe (Win32 API, C++)
There's SetNamedPipeHandleState, but it only controls buffering for remote pipes, not when both ends are on the same computer.
It seems to me you can solve the problem if you set the hStdOutput
and hStdError
of STARTUPINFO
not to pipe handles created with CreatePipe
, but instead of that you create a named pipes (with CallNamedPipe
function exactly like you used if before also using SECURITY_ATTRIBUTES with bInheritHandle
= TRUE
, see http://msdn.microsoft.com/en-us/library/aa365782.aspx) and then open there by name with respect of CreateFile
using FILE_FLAG_WRITE_THROUGH
flag. Like you can read on the MSDN (http://msdn.microsoft.com/en-us/library/aa365592.aspx):
The pipe client can use CreateFile to enable overlapped mode by specifying FILE_FLAG_OVERLAPPED or to enable write-through mode by specifying FILE_FLAG_WRITE_THROUGH.
So just reopen the pipe with respect of CreateFile
using FILE_FLAG_WRITE_THROUGH
flag and set the handle/handles to hStdOutput
and hStdError
of STARTUPINFO
.