2010-03-09 32 views
3

爲什麼有些進程開始在命令行上我的Windows機塊/如果它被重定向和其他人沒有緩衝他們的整個輸出?爲什麼當輸出重定向到一些CMD啓動程序區塊/緩衝器輸出?

實施例:tracert因爲它是寫不阻擋/緩衝器輸出。如果執行:

tracert ponyoverflow.com > output.txt 

... output.txt文件隨時間增長。這完全是我怎麼會想到事情的行爲。但是,我試圖與一個潛在供應商的軟件產品(iSpring SDK,如果您必須知道的話)一起工作,它似乎緩衝完整的輸出,直到過程完成。我感到迷惑的是,當這個軟件是在命令行中運行輸出來零碎,行由行,符合市場預期。

爲什麼會出現與不輸出重定向調用它之間的行爲有區別嗎?

跟進雜的問題:

  • 是Windows的命令行編程的世界這一共同的和/或標準?
  • 有沒有什麼我可以做到抓住
  • 我如何以Windows程序員的說法準確地與iSpring人溝通,我認爲他們的軟件應該在命令行上表現如何?

我不確定它有多重要,但是我的這一切實驗都發生在64位Windows 7 Home Premium機器上。

回答

1

(在iSpring裏的人都更快地迴應我的請求比我所能夢想。現貨上。這裏是他們的回答「爲什麼」的下方。)

在C++

標準輸出是默認緩衝。緩衝區大小約爲4KB。當應用程序結束時,緩衝區被刷新。寫入stdout數據時標準輸出與控制檯連接不被緩衝。

+0

@StuThombson目前我有同樣的問題,因爲你(不iSpring,雖然)。你有沒有找到一個解決辦法?有製作過程立即沖洗的方法嗎? – MiniGod