Muss ich eine Datei geöffnet lassen, nachdem ich mmap darauf aufgerufen habe?

Lesezeit: 1 Minute

Benutzeravatar von camelccc
camelccc

Ich habe ein Programm, das einige (100) große Dateien mit jeweils 10-100 MB abbildet. Ich brauche sie alle gleichzeitig gemappt.

Im Moment rufe ich an open gefolgt von mmap zu Beginn des Programms, gefolgt von munmap und close Am Ende.

Oft muss ich das Lauflimit für offene Dateien anpassen ulimit -n bevor Sie das Programm ausführen.

Die Frage ist, muss ich die Dateien tatsächlich offen halten oder kann ich das? open mmap close tun einige große Datenverarbeitung dann munmap wenn ich fertig bin.

Die Manpages von mmap scheinen mir in dieser Hinsicht nicht besonders klar zu sein.

  • Sie können es in einem Systemaufruf-Trace sehen (z strace) einer ausführbaren Datei, dass die Zuordnungen für gemeinsam genutzte Bibliotheken dem Muster folgen: Öffnen Sie den Deskriptor, mmappen Sie ihn, schließen Sie den Deskriptor.

    – Kas

    23. August 2021 um 20:20 Uhr

Benutzeravatar von unwind
entspannen

Nein, zumindest nicht unter Linux ist es in Ordnung, die Datei zu schließen.

Die Handbuchseite klar sagt:

Andererseits hebt das Schließen des Dateideskriptors die Zuordnung der Region nicht auf.

Auf Portierbarkeit habe ich das auch geprüft POSIX-Handbuches sagt dasselbe (wenn auch noch deutlicher):

Das mmap() -Funktion fügt einen zusätzlichen Verweis auf die Datei hinzu, die dem Dateideskriptor zugeordnet ist Fildes die nicht durch eine nachfolgende entfernt wird nah dran() auf diesem Dateideskriptor. Dieser Verweis wird entfernt, wenn keine Zuordnungen mehr zu der Datei vorhanden sind.

  • warum proc/<pid>/fd enthält keine Informationen zu den mmappten Dateien? Ist es weil mmap ist ein syscalldiese fds befinden sich also in den Datenstrukturen des Kernels? nach einem Freund fragen

    – Paschalis

    20. Januar 2017 um 1:24 Uhr

1417530cookie-checkMuss ich eine Datei geöffnet lassen, nachdem ich mmap darauf aufgerufen habe?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy