2014-06-10 5 views
8

Ho fatto una breve analisi sul comando "ls" in FC17 Linux.passaggio -1 come descrittore di file in mmap

Di seguito è stata l'uscita.

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 
... 

Non ricevo lo scopo e risultato di passaggio -1 come il descrittore di file alla chiamata mmap, qualcuno può far luce su questo?

risposta

2

Vedere mmap(2). Questo, insieme al flag MAP_ANONYMOUS, alloca la memoria condivisa. È un'alternativa alla memoria condivisa in stile SysV (shmctl).

4

Esistono due tipi di mapping (aree della memoria virtuale mappate su un processo): mappature supportate da file e mappature anonime (non supportate da file). Ci sono due modi per richiedere una mappatura anonimo:

  • (BSD) passano MAP_ANONYMOUS (ex MAP_ANON) per mmap(). Non esiste un file associato, quindi è necessario passare -1 come parametro file. Alcuni sistemi operativi ignorano il parametro file, altri richiedono che sia -1 (BSD IIRC).
  • (Sys V) Mappa /dev/zero. In questo caso, file è ovviamente significativo.