2010-07-10 77 views
1

我確實有一個程序(例如,稱之爲「a.exe」),它從幾個文件中讀取它的配置。 我可以編寫另一個程序將所有文件訪問「a.exe」重定向到另一個流(例如控制檯)嗎?將文件流重定向到內存流

我沒有「a.exe」代碼,但如果我得到a.exe的源代碼,顯然我可以更改所有文件訪問。但有沒有任何可能的方式來通過非常「最小」的改變覆蓋所有的文件訪問?例如覆蓋file.open函數或類似的東西?

回答

0

一個簡單的想法是讓另一個程序或腳本提供命名管道而不是實際文件。一旦a.exe嘗試從它們讀取數據,它將阻塞,直到其他數據通過管道發送。

就像在Linux中,你可以這樣做:

mkfifo config.txt # if a.exe uses config.txt 
./a.exe # a.exe will now block until you write to config.txt and close it 

他們應該在Windows中工作太看來:Wikipedia on Named Pipes

除非這一點,或者如果你想要做的事更高級的,你必須查看鉤住或覆蓋給定二進制文件的外部庫調用的工具。

+0

Windows上的管道命名限制會阻止透明替換具有命名管道的文件。這在Linux上是一個很好的方法,我自己也使用過它。 – 2010-07-10 10:06:41

+0

非常感謝你的回答。 我更新了問題的方式。 – Sangihi 2010-07-10 10:13:14

0

由於ofstreamostream繼承,在任何功能,你必須f(ostream& os)coutofstream ofs可以使用。同樣,在解析時,您可以這樣說:

ofstream ofs("output.txt"); 
ostream& os = (write_to_file) ? ofs : std::cout;