2013-08-29 162 views
0

我試圖運行控制檯應用程序並讀/寫它的標準I/O。問題是,當這個應用程序通過WriteFile(GetStdHandle(...))寫入輸出時,我用管道上的ReadFile成功讀取了它的輸入。fprintf vs WriteFile寫入管道:無法從所有管道讀取

當目標應用程序使用fprintf時,ReadFile會阻止,直到目標應用程序退出,在這種情況下,它會一次返回整個輸出。當目標應用程序阻塞(比如說,通過fgets())時,ReadFile塊。

我正在使用標準管道重定向:http://msdn.microsoft.com/en-us/library/windows/desktop/ms682499(v=vs.85).aspx

爲什麼這種奇怪的行爲,我如何解決它?

+0

Dup of http://stackoverflow.com/questions/1716296/why-does-printf-not-flush-after-the-call-unless-a-newline-is-in-the-format-strin –

回答

1

這可能是由於fprintf被緩衝,而WriteFile不是。你可以在fprintf之後使用fflush並嘗試使用它嗎?

+0

I可以,但那些不使用fflush的應用程序呢? 我應該如何處理? – Michael

+1

在這種情況下,什麼都不能做。事實上,你不能保證單獨的應用程序(沒有管道)將打印任何東西,直到它退出。因此,行爲與重定向到管道或打印到標準輸出沒有多大區別。 – user1952500