我使用this MSDN code将stdout和stderr挂接到子进程中(除了我先调用PeekNamedPipe以便不阻塞),其他一切都很好,除了stdout之外,如果进程不刷新则不立即查看该过程的输出。 Stderr似乎在每次向其发送内容时都会自动刷新,但stdout会缓冲结果。

突然我感到惊讶的是,当您在Visual Studio中逐步执行代码时,cmd.exe Shell进程可以立即打印结果。我也想这样做。它是如何做到的?

最佳答案

不是cmd.exe,而是stdio的实现。打印到标准输出时,它将信息保存在缓冲区中,并通过另一个线程定期(或在关闭之前)将其刷新。此行为是有意的,用于提高性能。否则,打印将会阻塞。

以下是在每个打印命令后使其自动刷新的方法:C autoflush

关于c - 即使进程不刷新,cmd.exe如何显示stdout?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58586386/

10-11 23:04
查看更多