C中的内存映射文件

时间:2009-05-26 15:25:24

标签: c memory file-io transparency library-interposition

我正在玩C中的内存映射文件,并想知道是否存在 是一种透明地用fopen替换FILE *和内存映射文件的方法。

示例:

FILE * fp = g_fopen(...);

//Program does things to this fp.

fclose();

但相反,是否可以使用FILE * fp = my_fopen(...)

我自己的函数会在磁盘mmap上打开一个文件,也许更改内容然后传回FILE *而程序看不到任何东西 除了新的my_fopen()和my_fclose()。

之外

这可以不用重写程序中的操作方式吗?

3 个答案:

答案 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;
}