web-dev-qa-db-ja.com

mmapを呼び出した後、ファイルを開いたままにする必要がありますか?

私はかなりの数(100)のかなり大きなファイルをそれぞれ10〜100MBにマップするプログラムを持っています。それらすべてを同時にマッピングする必要があります。

現時点では、プログラムの最初にopenを呼び出し、次にmmapを呼び出し、最後にmunmapcloseを呼び出しています。

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

問題は、ファイルを開いたままにする必要があるか、またはopenmmapcloseいくつかの大規模なデータ処理を行ってからmunmap完了できるかどうかです。 。

mmapのマニュアルページは、これについては私にはひどくはっきりしていないようです。

57
camelccc

いいえ、少なくともLinuxではファイルを閉じても問題ありません。

マニュアルページ は明確に述べています:

一方、ファイル記述子を閉じても、領域のマッピングは解除されません。

移植性のために、私は POSIXマニュアル もチェックしました、それは同じことを述べています(さらに明確に):

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

58
unwind