2014-06-10 13 views
8

Ich habe eine strace auf den "ls" -Befehl in FC17 Linux.Übergabe von -1 als Dateideskriptor zu mmap

Folgendes war der Ausgang.

execve("/usr/bin/ls", ["ls"], [/* 48 vars */]) = 0 
brk(0)         = 0x27c1000 
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fc765fa6000 
... 

Ich bin nicht den Zweck und Ergebnis des Führens immer -1 als Dateideskriptor zum mmap Anruf, kann jemand etwas Licht auf diesem verschütten?

Antwort

2

Siehe mmap(2). Dies teilt zusammen mit dem MAP_ANONYMOUS Flag Shared Memory zu. Es ist eine Alternative zu SysV-style shared memory (shmctl).

4

Es gibt zwei Arten von Zuordnungen (Bereiche des virtuellen Speichers, die einem Prozess zugeordnet sind): Dateigestützte Zuordnungen und anonyme (nicht Datei-unterstützte) Zuordnungen. Es gibt zwei Möglichkeiten, eine anonyme Zuordnung zu beantragen:

  • (BSD) Pass MAP_ANONYMOUS (früher MAP_ANON) zu mmap(). Es gibt keine zugeordnete Datei, daher sollten Sie -1 als file Parameter übergeben. Einige Betriebssysteme ignorieren den Parameter file, andere erfordern die Angabe -1 (BSD IIRC).
  • (Sys V) Karte /dev/zero. In diesem Fall ist file offensichtlich sinnvoll.
Verwandte Themen