2013-07-05 7 views
40

Mam program, który mapuje sporo (100) dużych plików po 10-100 MB każdy. Potrzebuję ich wszystkich zmapowanych w tym samym czasie.Czy muszę zachować plik otwarty po wywołaniu mmap na nim?

Obecnie Wołam open następnie mmap na początku programu, a następnie munmap i close na końcu.

Często muszę dostosować limit otwartych plików, uruchamiając ulimit -n przed uruchomieniem programu.

Pytanie to zrobić I rzeczywiście trzeba zachować pliki otwarte, czy mogę openmmapclose zrobić jakąś dużą przetwarzania danych następnie munmap kiedy jestem finnished.

Strony podręcznika mmap nie wydają mi się zbyt zrozumiałe.

Odpowiedz

46

Nie, przynajmniej nie na Linuksie, dobrze jest zamknąć plik.

The manual page wyraźnie stwierdza:

Z drugiej strony, zamykając deskryptor nie unmap regionu.

Dla przenośności, ja również sprawdziłem POSIX manual, to mówi to samo (choć jeszcze wyraźniej):

mmap() funkcja dodaje dodatkowy odniesienie do pliku skojarzonego z deskryptor pliku fildes, który nie jest usuwany przez kolejne close() na tym deskryptorze pliku. To odniesienie jest usuwane, gdy nie ma już odwzorowań do pliku.

+0

dlaczego 'proc//fd' nie zawiera informacji o zmapowanych plikach? Czy to dlatego, że 'mmap' jest' syscall', więc te fds są w strukturach danych jądra? _asking dla znajomego_ – Paschalis

Powiązane problemy