3

私は C でメモリ マップ ファイルをいじっていましたが、fopen の FILE * をメモリ マップ ファイルに透過的に置き換える方法があるかどうか疑問に思っていました。

例:

FILE * fp = g_fopen(...);

//Program does things to this fp.

fclose();

しかし、代わりに、 FILE *fp = my_fopen(...) を持つことは可能ですか?

私自身の関数がディスク上のファイルを mmap で開く場所では、内容を変更して FILE * を返しますが、プログラムは新しい my_fopen() と my_fclose() 以外の違いを認識しません。

これは、プログラムで操作を行う方法を書き直さなくても可能ですか?

4

3 に答える 3

5

魔法の言葉は「図書館の介入」です。ここに良いチュートリアルがあります: http://developers.sun.com/solaris/articles/lib_interposers.html


Oracle が Sun を購入したとき、多くの記事が消えてしまったか、Oracle の Web サイトからアクセスできなくなったようです。

当面の間、機能しているリンクを次に示します。

于 2009-05-26T15:29:50.923 に答える
2

メモリ マップト ファイル IO の目的は、読み取りと書き込みのシステム コールを実行することではなく、VM/バッファ キャッシュに依存して作業を行うことです。ファイルがメモリ マップされているという事実を隠した場合、ここでどのような利点がありますか? ファイルがマップされているアドレスをどのように知ることができますか?

于 2009-05-26T15:34:53.097 に答える
0

理解できない。mmaped したファイルに対して読み取り/書き込みを使用できるため、 my_fopen は次のようになります

FILE * my_fopen()
{
    FILE * myfp
    myfp = fopen(...);
    mmap(fileno(myfp),...);
    return myfp;
}
于 2009-05-26T15:34:14.143 に答える