focal (2) munmap.2.gz

Provided by: manpages-pl-dev_0.7-2_all bug

NAZWA

       mmap, munmap - mapowanie lub usunięcie mapowania plików lub urządzeń w pamięci

SKŁADNIA

       #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

        Uwaga! To tłumaczenie może być nieaktualne!

       Funkcja  mmap  zleca zamapowanie do pamięci, najchętniej pod adres start, length bajtów pliku (lub innego
       obiektu) zadanego przez deskryptor fd, przesuniętych względem początku 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 sposów ochrony pamięci (i nie  może  być  sprzeczny  z  trybem  otwarcia
       pliku).  Może  on  być  równy  PROT_NONE  lub  może  być  logicznym  OR jednego lub więcej spośród innych
       znaczników 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ć dostępne.

       Patametr flags określa rodzaj mapowanego obiektu, opcje mapowania i czy modyfikacje na  zmapowanej  kopii
       strony są prywatne dla procesu, czy też powinny być współdzielone z innymi odniesieniami. Ma on bity

       MAP_FIXED  Polecenie  nie wybierania innego adresu niż podany. Jeśli podanego adresu nie można użyć, mmap
                  zawiedzie. Jeśli podano MAP_FIXED, start musi być wielokrotnością  rozmiaru  strony.  Używanie
                  tej opcji nie jest zalecane.

       MAP_SHARED Polecenie  współdzielenia  mapowania  ze wszystkimi innymi procesami, które mapują ten obiekt.
                  Zapisywanie danych w danym obszarze będzie równoważne z zapisywaniem do  pliku.  Plik  może  w
                  rzeczywistości nie zostać zaktualizowany aż do wywołania msync(2) lub munmap(2).

       MAP_PRIVATE
                  Polecenie  utworzenia  prywatnego  mapowania,  typu  "kopiowanie podczas zapisu".  Zapisywanie
                  danych w danym  obszarze  nie  będzie  wpływać  na  zawartość  oryginalnego  pliku.  Nie  jest
                  określone,  czy  zmiany  zawartości  pliku  wykonane  po  wywołaniu  mmap  będą uwidocznione w
                  mapowanym obszarze.

       Trzeba podać dokładnie jedno spomiędzy MAP_SHARED i MAP_PRIVATE.

       Powyższe trzy znaczniki są opisane w POSIX.1b (poprzednio POSIX.4) oraz SUSv2.  Linux obsługje  dodatkowo
       następujące znaczniki niestandardowe:

       MAP_DENYWRITE
              Ten  znacznik  jest  ignorowany.  (Dawno temu sygnalizował on, że próba zapisu to mapowanego pliku
              powinna zawieść z ETXTBUSY. Ale było to źródłem ataków blokujących usługę (DoS).)

       MAP_EXECUTABLE
              Ten znacznik jest ignorowany.

       MAP_NORESERVE
              (Używany łącznie z  MAP_PRIVATE.)  Poleca  nie  rezerwować  stron  przestrzeni  wymiany  dla  tego
              mapowania.  Gdy  przestrzeń  wymiany  jest  zarezerwowana, ma się gwarancję, że istnieje możliwość
              modyfikacji tego prywatnego "kopiowanego podczas zapisu" obszaru. Gdy nie jest ona  zarezerwowana,
              można otrzymać SIGSEGV podczas zapisu, jeżeli braknie pamięci.

       MAP_LOCKED
              Ten znacznik jest ignorowany.

       MAP_GROWSDOWN
              Używany  do stosów. Sygnalizuje systemowi zarządzania pamięcią wirtualną w jądrze, że to mapowanie
              powinno być rozszerzane w pamięci w dół.

       MAP_ANONYMOUS
              Mapowanie nie jest oparte na żadnym pliku; argumenty fd i offset zostaną zignorowane. Ten znacznik
              w połączeniu z MAP_SHARED jest zaimplementowany w Linuksie począwszy od 2.4.

       MAP_ANON
              Alias dla MAP_ANONYMOUS. Porzucony.

       MAP_FILE
              Znacznik służący zgodności. 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.

       Niektóre systemy dokumentują dodatkowe znaczniki MAP_AUTOGROW, MAP_AUTORESRV, MAP_COPY i MAP_LOCAL.

       fd  powinno  być  prawidłowowym  deskryptorem pliku; jeżeli ustawiono MAP_ANONYMOUS, to argument ten jest
       ignorowany.

       offset powinno być wielokrotnością rozmiaru strony zwracanego przez getpagesize(2).

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

       Plik jest mapowany w wielokrotnościaćh rozmiaru  strony.  Dla  plików,  które  nie  są  wielokrotnościami
       rozmiaru  strony,  pozostała  pamięć  jest  zerowana  podczas  mapowania, a zapisy do tego obszaru nie są
       zapisywane w pliku. Efektem zmiany rozmiaru zamapowanego pliku na zamapowane  strony,  które  odpowiadają
       dodanym lub usuniętym obszarom pliku, jest nieokreślony.

       Funkcja  systemowa  munmap  usuwa mapowanie z podanego zakresu adresów i powoduje, że dalsze odwołania do
       adresów z tego zakresu będą generować nieprawidłowe odwołania do pamięci.  Mapowanie obszaru jest również
       automatycznie usuwane, gdy proces się zakończy.  Z drugiej strony, zamknięcie deskryptora pliku nie usuwa
       mapowania obszaru.

       Adres  start  musi  być  wielokrotnością  rozmiaru  strony.  Usuwane  jest  mapowanie  wszystkich   stron
       zawierających  fragmenty  ze  wskazanego zakresu, wszystkie późniejsze odwołania do tych stron wygenerują
       SIGSEGV. Nie jest błędem, gdy brak w podanym zakresie zamapowanych stron.

       Dla mapowań opartych na plikach pole st_atime zamapowanego pliku może zostać  zaktualizowane  w  dowolnym
       momencie  pomiędzy  mmap() i usunięciem odpowiedniego mapowania; pierwsze odwołanie do zamapowanej strony
       spowoduje zaktualizowanie tego pola, jeśli nie stało się to wcześniej.

       Pola st_ctime i st_mtime pliku zamapowanego z PROT_WRITE i MAP_SHARED zostanie zaktualizowane po  zapisie
       do  mapowanego obszaru, a przed późniejszym wywołaniem msync() ze znacznikiem MS_SYNC lub MS_ASYNC, jeśli
       taki wywołanie wystąpi.

WARTOŚĆ ZWRACANA

       Po pomyślnym zakończeniu B  mmap  zwraca  wskaźnik  do  mapowanego  obszaru.  Po  błędzie  zwracane  jest
       MAP_FAILED  (-1)  i  odpowiednio  ustawiane  jest  errno.  Po pomyślnym zakończeniu munmap zwraca 0, a po
       błędzie -1 i ustawia errno (prawdopodobnie na EINVAL).

UWAGI

       To, czy PROT_READ zawiera PROT_EXEC, czy nie, zależy od architektury.  W  przenośnych  programach  należy
       zawsze ustawiać PROT_EXEC, gdy planowane jest uruchamianie przez nie kodu w nowym mapowaniu.

BŁĘDY

       EBADF  fd nie jest prawidłowym deskryptorem pliku (a nie ustawiono MAP_ANONYMOUS).

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

       EINVAL Niewłaściwe start, length lub offset.  (Np., mogą być zbyt duże lub niewyrównane do granicy strony
              (PAGESIZE).)

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

       EAGAIN Plik został zablokowany lub zablokowano zbyt wiele pamięci.

       ENOMEM Brak  dostępnej  pamięci lub zostałaby przekroczona maksymalna liczba mapowań dla procesu.  ENODEV
              System plików, na którym znajduje sie podany plik nie wspiera mapowania w pamięci.

       Użycie zamapowanego obszaru może spowodować wystąpienie następujących sygnałów:

       SIGSEGV
              Próba zapisu do obszaru podanego dla mmap jako tylko do odczytu.

       SIGBUS Próba dostępu do fragmentu bufora, który nie odpowiada plikowi  (na  przykład,  za  końcem  pliku,
              włączając w to przypadek obcięcia pliku przez inny process).

ZGODNE Z

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

       MAP_32BIT jest rozszerzeniem linuksowym.

ZOBACZ TAKŻE

       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ŁUMACZENIU

       Powyższe tłumaczenie pochodzi z nieistniejącego już Projektu Tłumaczenia Manuali i może nie być aktualne.
       W razie zauważenia różnic między powyższym opisem a rzeczywistym  zachowaniem  opisywanego  programu  lub
       funkcji, prosimy o zapoznanie się z oryginalną (angielską) wersją strony podręcznika za pomocą polecenia:

              man --locale=C 2 mmap

       Prosimy   o   pomoc   w   aktualizacji   stron   man  -  więcej  informacji  można  znaleźć  pod  adresem
       http://sourceforge.net/projects/manpages-pl/.