2014-05-22 45 views
2

首先WriteFile函数,这个问题是基于我的最后一个问题在这里: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功能的画面。

ASM WriteFile

所以现在的问题是,我怎样才能使它同步?如何尽快在专用服务器上发生每一行?

回答

2

某处在它建立stdout是无缓冲输出选项位可执行文件。只需设置(或清除)该位。然后,每一次写入电话都会立即传送。这为该程序增加了大量的执行时间和I/O系统工作,但对此可能还是可以的。

处理该输出(作为输入)的程序应缓冲整行,因为该程序本身不可能完成全行输出。

+0

谢谢,我会试试。:)但是,首先我会尝试使用ReadConsoleOutput,因为在父级的控制台中它会被同步,只有管道会使它不确定 – Iburidu

+0

你是对的!没有任何一点,但是在调试过程中,我在WriteFile之前发现了跳转2个函数。花了大约一个小时,但它现在真棒! :) 谢谢!我真的认为PIPE以某种方式使它不确定^^ – Iburidu

1

你为什么不尝试:

std::cout << s << std::endl << std::flush; 
           ^^^^^^^^^^ 
+0

不工作:(它仍然没有同步 – Iburidu