繁体   English   中英

C中的内存映射文件

[英]memory-mapped files in C

我在玩C语言中的内存映射文件,想知道是否有办法透明地用内存映射文件替换fopen中的FILE *。

例:

FILE * fp = g_fopen(...);

//Program does things to this fp.

fclose();

但是相反,可能有FILE * fp = my_fopen(...)

在我自己的函数会打开磁盘上的文件的位置,可能会更改内容,然后将文件*传递回去,而程序不会看到任何与众不同的东西,除了新的my_fopen()和my_fclose()。

不必重写程序中的操作方式就可以做到吗?

魔术词是“库插入”。 这是一个很好的教程: http : //developers.sun.com/solaris/articles/lib_interposers.html


当甲骨文购买sun时,许多文章似乎已经消失和/或无法通过甲骨文的网站访问。

暂时有一些可用的链接:

内存映射文件IO的目的不是通过系统调用进行读写,而是依靠VM /缓冲区高速缓存来完成工作。 如果您隐藏了文件已进行内存映射的事实,那么这有什么好处? 您如何知道文件映射到的地址?

我不明白 您可以对已映射的文件进行读/写操作,因此my_fopen如下所示

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM