2016-11-21 3 views
0

Wie kann ich mmap verwenden, um Speicher innerhalb einer virtuellen Ramdisk zu reservieren? Können sagen, ich mache:Erstellen Sie mmap innerhalb der virtuellen Ramdisk

mkdir /mnt/ramdisk 
mount -t tmpfs -o size=10m tmpfs /mnt/ramdisk 

ich jetzt einen virtuellen RAM-Disk, aber wie ordne ich es in meinem C-Programm?

int main() { 
    // .... 
    addr = mmap(/* ramdisk address? */, size, PROT_READ_WRITE, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0); 
+0

Wenn Sie eine RAM-Disk verwenden, würde die Verwendung von 'mmap' nur Overhead auslösen. Warum nicht 'fopen' benutzen? – Dai

+0

@Dai Ich benutze mmap als eine Möglichkeit, eine Region von Speicher für meine Bibliothek zu reservieren, aber ich bin mir nicht sicher, wie ich so etwas tun würde, wenn ich diesen Speicher innerhalb einer Ramdisk reservieren möchte, anstatt mmap bereitzustellen Wert von 'NULL' für einen Adresshinweis –

Antwort

0

Die Tatsache, dass /mnt/ramdisk ein tmpfs ist kein Lager haben, wie Sie es verwenden.

Wenn Sie den Speicher-Karte eine Datei auf dem Gerät wollte, dann würden Sie open() eine Datei und wo es sich mit MAP_FILE (nicht MAP_ANONYMOUS), als ob es eine normale Datei waren. Übergeben Sie keine Adresse. ein passender wird für Sie ausgewählt.

+0

Kann ich diese Ramdisk für direkten Speicherzugriff verwenden? Ich kann nicht einfach open() auf einem Verzeichnis wie '/ mnt/ramdisk' aufrufen –

+1

Nein. Die Semantik ändert sich nicht, nur weil es ein tmpfs ist - es verhält sich genau wie jedes andere Dateisystem. – duskwuff

Verwandte Themen