2009-05-26 2 views
3

Я играл с файлами с отображением памяти в C и задавался вопросом, есть ли - это способ заменить FILE * из fopen прозрачным файлом памяти.Файлы с отображением памяти в C

Пример:

FILE * fp = g_fopen(...); 

//Program does things to this fp. 

fclose(); 

Но вместо этого, можно иметь FILE * Fp = my_fopen (...)

Где моя собственная функция будет открыть файл на диске ттар это, возможно изменение содержимое, а затем передать FILE * без программы, видя что-либо , за исключением новых my_fopen() и my_fclose().

Можно ли сделать это без необходимости переписывать способ выполнения операций в программе?

+0

Эти ответы для * Ix систем, ответ для Windows, здесь: http://stackoverflow.com/questions/7369445/is-there-a-windows-equivalent-to-fdopen-for-handles –

ответ

5

Волшебные слова - это «вмешательство библиотеки». Вот хороший учебник: http://developers.sun.com/solaris/articles/lib_interposers.html


Когда Oracle купил солнцу много статей, кажется, исчезли, и/или не доступны через веб-сайт Oracle.

Вот некоторые ссылки, которые, в настоящее время, являются функциональными:

  • Это оригинальная статья, опубликованной в 2001 году: Building Library Interposers for Fun and Profit (Dr. Доббс)
  • Ссылка developers.sun.com было копия оригинального автора, возможно, с изменениями, внесенными в статью 2001 года; это repost: Debugging and Performance Tuning with Library Interposers (Wayback Machine)
  • Linker & Libraries Guide для Sun Studio/Oracle Solaris Studio. Он охватывает тему библиотечного интерпозиции с более подробными техническими деталями.
+0

Великий link, thank you – James

0

Я не понимаю. Вы можете использовать для чтения/записи на файл вы mmaped, так что ваши my_fopen будет выглядеть следующим образом

FILE * my_fopen() 
{ 
    FILE * myfp 
    myfp = fopen(...); 
    mmap(fileno(myfp),...); 
    return myfp; 
} 
2

Цель памяти отображенных файла IO не пройти через системные вызовы для чтения и записи, но полагаться на VM/buffer cache, чтобы выполнить работу. Если вы скрываете тот факт, что файл имеет карту памяти, в чем преимущество? Как вы узнаете, на каком адресе отображается файл?

+0

Почувствуемое преимущество для меня было умение изменять существующие звонки, чтобы делать то, что я желаю. Возможно, добавление пользовательских действий перед чтением файла или изменение способа его чтения без изменения существующего кода. – James

Смежные вопросы