我正在玩C中的内存映射文件,并想知道是否存在 是一种透明地用fopen替换FILE *和内存映射文件的方法。
示例:
FILE * fp = g_fopen(...);
//Program does things to this fp.
fclose();
但相反,是否可以使用FILE * fp = my_fopen(...)
我自己的函数会在磁盘mmap上打开一个文件,也许更改内容然后传回FILE *而程序看不到任何东西 除了新的my_fopen()和my_fclose()。
之外这可以不用重写程序中的操作方式吗?
答案 0 :(得分:5)
魔术词是“图书馆介入”。这是一个很好的教程: http://developers.sun.com/solaris/articles/lib_interposers.html
当甲骨文购买太阳时,许多文章似乎已经消失和/或无法通过甲骨文网站访问。
以下是目前正在发挥作用的一些链接:
答案 1 :(得分:2)
内存映射文件IO的目的不是通过系统调用进行读写,而是依靠VM /缓冲区缓存来完成工作。如果你隐藏文件已被内存映射的事实,这里的优点是什么?您如何知道文件映射到的地址?
答案 2 :(得分:0)
我不明白。您可以对已编录的文件使用读/写,因此您的my_fopen 看起来像这样
FILE * my_fopen()
{
FILE * myfp
myfp = fopen(...);
mmap(fileno(myfp),...);
return myfp;
}