[英]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.