2013-07-05 22 views
40

私は相当数(100)のかなり大きなファイルを10〜100MBごとにマッピングするプログラムを持っています。私はそれらすべてを同時にマッピングする必要があります。mmapを呼び出した後にファイルを開いたままにする必要はありますか?

今のところ私はopenに続いてmmapを呼び出し、最後にmunmapcloseが続きます。

多くの場合、プログラムを実行する前に、開いているファイルの制限を調整してulimit -nを調整する必要があります。

質問は、私が実際に開いているファイルを保持する必要があるのですかある、または私はfinnishedだとき、私はopenmmapcloseはその後munmapをいくつかの大規模なデータ処理を行うことができます。

mmapのマニュアルページは、私にはあまりにも明らかではないようです。

答えて

46

いいえ、少なくともLinuxではファイルを閉じることはできません。

The manual pageは明確に述べている:一方

を、地域のマップを解除しないファイルディスクリプタをクローズします。

は、移植性のために、私もPOSIX manualをチェックし、それが(ただし、より明確に)同じことを言う:

のmmap()機能が関連付けられたファイルへの追加の参照を追加しますファイル記述子fildesこれはそのファイル記述子のclose()に続いてによって削除されません。この参照は、ファイルへのマッピングがなくなると削除されます。

+0

なぜ 'proc//fd'にmmappedファイルに関する情報が含まれていないのですか? 'mmap'は' syscall'なので、これらのfdsはカーネルのデータ構造上にあるのですか?友達のための_ _ – Paschalis

関連する問題