簡體   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