setvbuf()没什么区别,因为它更改了C运行时库而不是OS的一部分的状态。当新进程开始运行时,它将重新初始化其C运行时库(也就是说,如果它完全使用CRT!)
我所知解决此问题的唯一方法是以某种方式伪造该过程的终端。这是因为大多数CRT库在默认情况下仅在相信连接到交互式终端的情况下才执行行缓冲(在Unix世界中:如果
isatty()在文件描述符上返回true),否则它们将在更大的块中缓冲(通常为8Kb左右)
)。
该实用程序看起来像是一个很好的起点。

setvbuf()没什么区别,因为它更改了C运行时库而不是OS的一部分的状态。当新进程开始运行时,它将重新初始化其C运行时库(也就是说,如果它完全使用CRT!)
我所知解决此问题的唯一方法是以某种方式伪造该过程的终端。这是因为大多数CRT库在默认情况下仅在相信连接到交互式终端的情况下才执行行缓冲(在Unix世界中:如果
isatty()在文件描述符上返回true),否则它们将在更大的块中缓冲(通常为8Kb左右)
该实用程序看起来像是一个很好的起点。