我有一个程序(例如称之为“a.exe”),它从几个文件中读取其配置。 我可以编写另一个程序来将“a.exe”的所有文件访问重定向到另一个流(例如控制台)吗?
我没有“a.exe”的代码但是如果我获得了a.exe的源代码,显然我可以更改所有文件访问。但有没有办法通过非常“最小”的变化来覆盖所有文件访问?例如覆盖file.open函数或类似的东西?
答案 0 :(得分: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
除此之外,或者如果你想做更高级的事情,你必须研究挂钩或覆盖给定二进制文件的外部库调用的工具。
答案 1 :(得分:0)
由于ofstream
继承自ostream
,因此在您拥有f(ostream& os)
的任何功能中
可以使用cout
和ofstream ofs
。同样,在解析时你可以说:
ofstream ofs("output.txt");
ostream& os = (write_to_file) ? ofs : std::cout;