私はかなりの数(100)のかなり大きなファイルをそれぞれ10〜100MBにマップするプログラムを持っています。それらすべてを同時にマッピングする必要があります。
現時点では、プログラムの最初にopen
を呼び出し、次にmmap
を呼び出し、最後にmunmap
とclose
を呼び出しています。
多くの場合、実行中の開いているファイルの制限を調整する必要がありますulimit -n
プログラムを実行する前。
問題は、ファイルを開いたままにする必要があるか、またはopen
mmap
close
いくつかの大規模なデータ処理を行ってからmunmap
完了できるかどうかです。 。
mmap
のマニュアルページは、これについては私にはひどくはっきりしていないようです。
いいえ、少なくともLinuxではファイルを閉じても問題ありません。
マニュアルページ は明確に述べています:
一方、ファイル記述子を閉じても、領域のマッピングは解除されません。
移植性のために、私は POSIXマニュアル もチェックしました、それは同じことを述べています(さらに明確に):
mmap()関数は、ファイル記述子に関連付けられているファイルに追加の参照を追加しますfildesこれは、そのファイル記述子の後続のclose()によって削除されません。この参照は、ファイルへのマッピングがなくなると削除されます。