Перенаправить файловый поток в поток памяти - PullRequest
1 голос
/ 10 июля 2010

У меня есть программа (например, «a.exe»), которая считывает свою конфигурацию из нескольких файлов. я могу написать другую программу для перенаправления всех обращений к файлу "a.exe" в другой поток (например, консоль)?

У меня нет кода "a.exe", но если я получу исходный код a.exe, очевидно, я могу изменить все обращения к файлам. но есть ли какой-нибудь возможный способ переопределить весь доступ к файлу с помощью «минимальных» изменений? например, переопределение функции file.open или что-то в этом роде

Ответы [ 2 ]

0 голосов
/ 27 ноября 2012

Поскольку ofstream наследуется от ostream, в любой функции, где у вас есть f(ostream& os) Можно использовать как cout, так и ofstream ofs. Аналогично, при разборе вы могли бы сказать:

ofstream ofs("output.txt");
ostream& os = (write_to_file) ? ofs : std::cout;
0 голосов
/ 10 июля 2010

Одна простая идея состоит в том, чтобы другая программа или скрипт предоставляли именованные каналы вместо реальных файлов.Как только 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кажется: Википедия по именованным каналам

Запретив это, или если вы хотите сделать что-то более продвинутое, вам придется изучить инструменты, которые перехватывают или переопределяют внешние вызовы библиотеки для данногодвоичный файл.

...