在没有延迟的情况下从Win32中的另一个进程捕获stdout,可以使用以下方法:
管道是一种进程间通信(IPC)机制,可以在不同进程之间传输数据。在Win32中,可以使用匿名管道(Anonymous Pipes)或命名管道(Named Pipes)来实现。
创建匿名管道:
HANDLE hReadPipe, hWritePipe;
CreatePipe(&hReadPipe, &hWritePipe, NULL, 0);
创建命名管道:
HANDLE hPipe = CreateNamedPipe(TEXT("\\\\.\\pipe\\PipeName"),
PIPE_ACCESS_DUPLEX,
PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_WAIT,
PIPE_UNLIMITED_INSTANCES,
BUFFER_SIZE,
BUFFER_SIZE,
0,
NULL);
在创建子进程时,可以使用STARTUPINFO
结构体中的hStdOutput
和hStdError
字段,将子进程的stdout和stderr重定向到管道。
STARTUPINFO si;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
si.dwFlags = STARTF_USESTDHANDLES;
si.hStdOutput = hWritePipe;
si.hStdError = hWritePipe;
CreateProcess(NULL,
lpCommandLine,
NULL,
NULL,
TRUE,
0,
NULL,
NULL,
&si,
&pi);
在父进程中,可以使用ReadFile
函数从管道中读取子进程的stdout和stderr。
DWORD dwRead;
CHAR chBuf[BUFFER_SIZE];
ReadFile(hReadPipe, chBuf, BUFFER_SIZE - 1, &dwRead, NULL);
在读取完成后,记得关闭管道句柄。
CloseHandle(hReadPipe);
CloseHandle(hWritePipe);
这样,就可以在没有延迟的情况下从Win32中的另一个进程捕获stdout了。
推荐的腾讯云相关产品:
产品介绍链接地址:
没有搜到相关的沙龙
领取专属 10元无门槛券
手把手带您无忧上云