首先,这个问题是基于我在这里的最后一个问题:Reading Console Buffer / Output C++
我有一个已编译的可执行二进制文件。它有一些输出,我想将它重定向到另一个程序,处理行。我成功找到了输出的位置,并将其修改为STDOUT。问题是,当我使用它时:
./jampDed.exe | stdout.exe
然后输出未同步。我在每1000-2000字节之后得到了内容。
stdout.cpp
#include <iostream>
int main() {
std::string s;
while (std::getline(std::cin, s, '\n')) {
std::cout << s << std::endl;
}
return 0;
}
我还创建了一个关于程序集修改的图片,其中默认使用了Kernel32.WriteFile函数。
所以问题是,如何让它同步?如何在专用服务器上尽快获得每一行?
答案 0 :(得分:2)
在可执行文件中的某个位置,它建立stdout
是无缓冲输出的选项位。只需设置(或清除)该位。然后每次调用写入都会毫不拖延地进行传输。这为该程序增加了大量的执行时间和I / O系统工作量,但对此可能没有问题。
处理该输出(作为输入)的程序应缓冲整行,因为程序本身不太可能进行全行输出。
答案 1 :(得分:1)
你为什么不试试:
std::cout << s << std::endl << std::flush;
^^^^^^^^^^