2014-05-22 89 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