Provided by: manpages-pl-dev_20060617-3_all bug

NAZWA

       mmap,  munmap  -  mapowanie  lub usunicie mapowania plikow lub urzdze w
       pamici

SK/LADNIA

       #include <sys/mman.h>

       #ifdef _POSIX_MAPPED_FILES

       void * mmap(void *start, size_t length, int prot , int flags,  int  fd,
       off_t offset);

       int munmap(void *start, size_t length);

       #endif

OPIS

       Funkcja  mmap  zleca zamapowanie do pamici, najchtniej pod adres start,
       length bajtow pliku (lub innego obiektu) zadanego przez deskryptor  fd,
       przesunitych  wzgldem  pocztku o offset.  Adres start jest jednak tylko
       propozycj i zazwyczaj jest przekazywany jako  0.   Rzeczywiste  miejsce
       zamapowania obiektu jest zwracane przez mmap i nigdy nie jest zerem.

       Argument  prot  opisuje  oczekiwany sposow ochrony pamici (i nie moe by
       sprzeczny z trybem otwarcia pliku). Moe on by rowny PROT_NONE  lub  moe
       by logicznym OR jednego lub wicej sporod innych znacznikow PROT_*.

       PROT_EXEC  Strony mog by wykonywane.

       PROT_READ  Strony mog by odczytywane.

       PROT_WRITE Strony mog by zapisywane.

       PROT_NONE  Strony nie mog by dostpne.

       Patametr  flags okrela rodzaj mapowanego obiektu, opcje mapowania i czy
       modyfikacje na zmapowanej kopii strony s prywatne dla procesu,  czy  te
       powinny by wspoldzielone z innymi odniesieniami. Ma on bity

       MAP_FIXED  Polecenie  nie  wybierania  innego  adresu  ni  podany. Jeli
                  podanego adresu nie mona uy,  mmap  zawiedzie.  Jeli  podano
                  MAP_FIXED,  start  musi  by  wielokrotnoci  rozmiaru strony.
                  Uywanie tej opcji nie jest zalecane.

       MAP_SHARED Polecenie  wspoldzielenia  mapowania  ze  wszystkimi  innymi
                  procesami,  ktore  mapuj  ten  obiekt.  Zapisywanie danych w
                  danym obszarze bdzie rownowane z zapisywaniem do pliku. Plik
                  moe  w rzeczywistoci nie zosta zaktualizowany a do wywolania
                  msync(2) lub munmap(2).

       MAP_PRIVATE
                  Polecenie utworzenia prywatnego mapowania, typu  "kopiowanie
                  podczas  zapisu".   Zapisywanie  danych w danym obszarze nie
                  bdzie  wplywa  na  zawarto  oryginalnego  pliku.  Nie   jest
                  okrelone,  czy  zmiany zawartoci pliku wykonane po wywolaniu
                  mmap bd uwidocznione w mapowanym obszarze.

       Trzeba poda dokladnie jedno spomidzy MAP_SHARED i MAP_PRIVATE.

       Powysze trzy znaczniki s opisane w POSIX.1b (poprzednio  POSIX.4)  oraz
       SUSv2.  Linux obslugje dodatkowo nastpujce znaczniki niestandardowe:

       MAP_DENYWRITE
              Ten  znacznik  jest  ignorowany.  (Dawno temu sygnalizowal on, e
              proba zapisu to mapowanego pliku powinna zawie z  ETXTBUSY.  Ale
              bylo to rodlem atakow blokujcych uslug (DoS).)

       MAP_EXECUTABLE
              Ten znacznik jest ignorowany.

       MAP_NORESERVE
              (Uywany  lcznie  z  MAP_PRIVATE.)  Poleca  nie  rezerwowa  stron
              przestrzeni wymiany dla tego mapowania.  Gdy  przestrze  wymiany
              jest   zarezerwowana,   ma   si   gwarancj,  e  istnieje  moliwo
              modyfikacji  tego  prywatnego   "kopiowanego   podczas   zapisu"
              obszaru.  Gdy  nie  jest ona zarezerwowana, mona otrzyma SIGSEGV
              podczas zapisu, jeeli braknie pamici.

       MAP_LOCKED
              Ten znacznik jest ignorowany.

       MAP_GROWSDOWN
              Uywany  do  stosow.  Sygnalizuje  systemowi  zarzdzania   pamici
              wirtualn w jdrze, e to mapowanie powinno by rozszerzane w pamici
              w dol.

       MAP_ANONYMOUS
              Mapowanie nie jest oparte na adnym pliku; argumenty fd i  offset
              zostan  zignorowane.  Ten znacznik w polczeniu z MAP_SHARED jest
              zaimplementowany w Linuksie poczwszy od 2.4.

       MAP_ANON
              Alias dla MAP_ANONYMOUS. Porzucony.

       MAP_FILE
              Znacznik slucy zgodnoci. Ignorowany.

       MAP_32BIT
              Umieszczenie mapowania w pierwszych  2GB  przestrzeni  adresowej
              procesu.  Ignorowany gdy ustawiony jest MAP_FIXED.  Znacznik ten
              jest obecnie  wspierany  jedynie  przez  64-bitowe  programy  na
              architekturze x86-64.

       Niektore   systemy   dokumentuj   dodatkowe   znaczniki   MAP_AUTOGROW,
       MAP_AUTORESRV, MAP_COPY i MAP_LOCAL.

       fd  powinno  by  prawidlowowym  deskryptorem  pliku;  jeeli   ustawiono
       MAP_ANONYMOUS, to argument ten jest ignorowany.

       offset  powinno  by  wielokrotnoci  rozmiaru  strony  zwracanego  przez
       getpagesize(2).

       Pami zamapowana za pomoc mmap jest zachowywana poprzez fork(2)  z  tymi
       samymi atrybutami.

       Plik jest mapowany w wielokrotnociah rozmiaru strony. Dla plikow, ktore
       nie s wielokrotnociami rozmiaru strony, pozostala  pami  jest  zerowana
       podczas  mapowania,  a zapisy do tego obszaru nie s zapisywane w pliku.
       Efektem zmiany rozmiaru zamapowanego pliku na zamapowane strony,  ktore
       odpowiadaj dodanym lub usunitym obszarom pliku, jest nieokrelony.

       Funkcja  systemowa  munmap usuwa mapowanie z podanego zakresu adresow i
       powoduje, e dalsze odwolania do adresow  z  tego  zakresu  bd  generowa
       nieprawidlowe  odwolania  do  pamici.   Mapowanie  obszaru  jest rownie
       automatycznie usuwane,  gdy  proces  si  zakoczy.   Z  drugiej  strony,
       zamknicie deskryptora pliku nie usuwa mapowania obszaru.

       Adres  start  musi  by  wielokrotnoci  rozmiaru  strony.  Usuwane  jest
       mapowanie  wszystkich  stron  zawierajcych  fragmenty   ze   wskazanego
       zakresu, wszystkie poniejsze odwolania do tych stron wygeneruj SIGSEGV.
       Nie jest bldem, gdy brak w podanym zakresie zamapowanych stron.

       Dla mapowa opartych na plikach pole  st_atime  zamapowanego  pliku  moe
       zosta  zaktualizowane  w  dowolnym  momencie pomidzy mmap() i usuniciem
       odpowiedniego  mapowania;  pierwsze  odwolanie  do  zamapowanej  strony
       spowoduje zaktualizowanie tego pola, jeli nie stalo si to wczeniej.

       Pola  st_ctime  i st_mtime pliku zamapowanego z PROT_WRITE i MAP_SHARED
       zostanie zaktualizowane po  zapisie  do  mapowanego  obszaru,  a  przed
       poniejszym wywolaniem msync() ze znacznikiem MS_SYNC lub MS_ASYNC, jeli
       taki wywolanie wystpi.

WARTO ZWRACANA

       Po pomylnym zakoczeniu B mmap zwraca wskanik do mapowanego obszaru.  Po
       bldzie  zwracane  jest  MAP_FAILED  (-1)  i  odpowiednio ustawiane jest
       errno.  Po pomylnym zakoczeniu munmap  zwraca  0,  a  po  bldzie  -1  i
       ustawia errno (prawdopodobnie na EINVAL).

UWAGI

       To,  czy PROT_READ zawiera PROT_EXEC, czy nie, zaley od architektury. W
       przenonych programach naley zawsze  ustawia  PROT_EXEC,  gdy  planowane
       jest uruchamianie przez nie kodu w nowym mapowaniu.

B/LDY

       EBADF  fd  nie  jest  prawidlowym  deskryptorem  pliku (a nie ustawiono
              MAP_ANONYMOUS).

       EACCES Deskryptor pliku nie odnosi si do zwyklego pliku.  Lub zgloszono
              MAP_PRIVATE,   lecz  fd  nie  jest  otwarty  dla  odczytu.   Lub
              zgloszono MAP_SHARED i  ustawiono  PROT_WRITE,  a  fd  nie  jest
              otwarte  w  trybie  odczytu  i  zapisu  (O_RDWR).  Lub zgloszono
              PROT_WRITE, lecz plik jest otwarty tylko do dopisywania.

       EINVAL Niewlaciwe start, length lub offset.  (Np., mog by zbyt due  lub
              niewyrownane do granicy strony (PAGESIZE).)

       ETXTBUSY
              Ustawiono  MAP_DENYWRITE,  lecz  obiekt wskazywany przez fd jest
              otwarty do zapisu.

       EAGAIN Plik zostal zablokowany lub zablokowano zbyt wiele pamici.

       ENOMEM Brak  dostpnej  pamici  lub  zostalaby  przekroczona  maksymalna
              liczba  mapowa  dla  procesu.   ENODEV  System plikow, na ktorym
              znajduje sie podany plik nie wspiera mapowania w pamici.

       Uycie  zamapowanego  obszaru  moe  spowodowa   wystpienie   nastpujcych
       sygnalow:

       SIGSEGV
              Proba zapisu do obszaru podanego dla mmap jako tylko do odczytu.

       SIGBUS Proba  dostpu  do  fragmentu bufora, ktory nie odpowiada plikowi
              (na przyklad, za kocem pliku, wlczajc  w  to  przypadek  obcicia
              pliku przez inny process).

ZGODNE Z

       SVr4,  POSIX.1b  (poprzednio POSIX.4), 4.4BSD, SUSv2.  SVr4 dokumentuje
       dodatkowe bldy ENXIO i ENODEV.  SUSv2 dokumentuje dodatkowe bldy EMFILE
       i EOVERFLOW.

       MAP_32BIT jest rozszerzeniem linuksowym.

ZOBACZ TAKE

       getpagesize(2),   mmap2(2),   mremap(2),  msync(2),  shm_open(2),  B.O.
       Gallmeister, POSIX.4, O'Reilly, str. 128-129 i 389-391.

INFORMACJE O T/LUMACZENIU

       Powysze tlumaczenie pochodzi z nieistniejcego ju  Projektu  Tlumaczenia
       Manuali  i  moe nie by aktualne. W razie zauwaenia ronic midzy powyszym
       opisem a rzeczywistym zachowaniem  opisywanego  programu  lub  funkcji,
       prosimy o zapoznanie si z oryginaln (angielsk) wersj strony podrcznika.