File: mmap.2

package info (click to toggle)
manpages-pl 1%3A0.7-1
  • links: PTS, VCS
  • area: main
  • in suites: buster, stretch
  • size: 22,276 kB
  • ctags: 7
  • sloc: sh: 112; makefile: 59; perl: 32
file content (324 lines) | stat: -rw-r--r-- 11,193 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
.\" Hey Emacs! This file is -*- nroff -*- source.
.\"
.\" {PTM/PB/0.1/09-05-1990/"mapowanie plików lub urządzenia w pamięci"}
.\" Last update: A. Krzysztofowicz <ankry@mif.pg.gda.pl>, Jun 2002,
.\"              manpages 1.50
.\" $Id: mmap.2,v 1.8 2003/07/22 11:16:10 robert Exp $
.\"
.\" Copyright (C) 1996 Andries Brouwer (aeb@cwi.nl)
.\"
.\" Permission is granted to make and distribute verbatim copies of this
.\" manual provided the copyright notice and this permission notice are
.\" preserved on all copies.
.\"
.\" Permission is granted to copy and distribute modified versions of this
.\" manual under the conditions for verbatim copying, provided that the
.\" entire resulting derived work is distributed under the terms of a
.\" permission notice identical to this one
.\" 
.\" Since the Linux kernel and libraries are constantly changing, this
.\" manual page may be incorrect or out-of-date.  The author(s) assume no
.\" responsibility for errors or omissions, or for damages resulting from
.\" the use of the information contained herein.  The author(s) may not
.\" have taken the same level of care in the production of this manual,
.\" which is licensed free of charge, as they might when working
.\" professionally.
.\" 
.\" Formatted or processed versions of this manual, if unaccompanied by
.\" the source, must acknowledge the copyright and authors of this work.
.\"
.\" Modified Fri Jan 31 16:38:25 1997 by Eric S. Raymond <esr@thyrsus.com>
.\" Modified Sat Mar 25 08:11:16 2000 by Jim Van Zandt <jrv@vanzandt.mv.com>
.\" Modified Thu Oct  4 03:09:44 2001 by John Levon <moz@compsoc.man.ac.uk>
.\" Modified Sun Feb  2 16:00    2003 by Andi Kleen <ak@muc.de>
.\"
.TH MMAP 2 2000-03-25 "Linux 2.3.51" "Podręcznik programisty Linuksa"
.SH NAZWA
mmap, munmap \- mapowanie lub usunięcie mapowania plików lub urządzeń w pamięci
.SH SKŁADNIA
.B #include <sys/mman.h>
.sp
.B #ifdef _POSIX_MAPPED_FILES
.sp
.BI "void * mmap(void *" start ", size_t " length ", int " prot
.BI ", int " flags ", int " fd ", off_t " offset );
.sp
.BI "int munmap(void *" start ", size_t " length );
.sp
.B #endif
.SH OPIS
\fI Uwaga! To tłumaczenie może być nieaktualne!\fP
.PP
Funkcja
.B mmap
zleca zamapowanie do pamięci, najchętniej pod adres
.IR start ,
.I length
bajtów pliku (lub innego obiektu) zadanego przez deskryptor
.IR fd ,
przesuniętych względem początku o
.IR offset .
Adres
.I start
jest jednak tylko propozycją i zazwyczaj jest przekazywany jako 0.
Rzeczywiste miejsce zamapowania obiektu jest zwracane przez
.B mmap
i nigdy nie jest zerem.
.LP
Argument
.I prot
opisuje oczekiwany sposów ochrony pamięci (i nie może być sprzeczny z trybem
otwarcia pliku). Może on być równy
.B PROT_NONE
lub może być logicznym OR jednego lub więcej spośród innych znaczników PROT_*.
.TP 1.1i
.B PROT_EXEC
Strony mogą być wykonywane.
.TP
.B PROT_READ
Strony mogą być odczytywane.
.TP
.B PROT_WRITE
Strony mogą być zapisywane.
.TP
.B PROT_NONE
Strony nie mogą być dostępne.
.LP
Patametr
.I 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
.TP 1.1i
.B MAP_FIXED
Polecenie nie wybierania innego adresu niż podany. Jeśli podanego adresu nie
można użyć,
.B mmap
zawiedzie. Jeśli podano MAP_FIXED,
.I start
musi być wielokrotnością rozmiaru strony. Używanie tej opcji nie jest
zalecane.
.TP
.B 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
.BR msync (2)
lub
.BR munmap (2).
.TP
.B 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
.B mmap
będą uwidocznione w mapowanym obszarze.
.LP
Trzeba podać dokładnie jedno spomiędzy MAP_SHARED i MAP_PRIVATE.
.LP
Powyższe trzy znaczniki są opisane w POSIX.1b (poprzednio POSIX.4) oraz SUSv2.
Linux obsługje dodatkowo następujące znaczniki niestandardowe:
.TP
.B MAP_DENYWRITE
Ten znacznik jest ignorowany.
.\" Wprowadzony w 1.1.36, usunięty w 1.3.24.
(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).)
.TP
.B MAP_EXECUTABLE
Ten znacznik jest ignorowany.
.\" Wprowadzony w 1.1.38, usunięty w 1.3.24. Znacznik sprawdzany w proc_follow_link.
.\" (Dawno temu sygnalizował on, że mapowany plik jet uruchamialny.
.\" Jednakże, z tej informacji w rzeczywistości nigdzie nie korzystano.)
.\" Linus mówił o DoS związanym z MAP_EXECUTABLE, ale może on myślał o
.\" MAP_DENYWRITE?
.TP
.B 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.
.\" (Pod Linuksem nie ma gwarancji. Dowolny proces może zostać unicestwiony
.\" w dowolnym momencie, gdy w systemie zabraknie pamięci.)
.TP
.B MAP_LOCKED
Ten znacznik jest ignorowany.
.\" Jeśli ustawiony, zamapowane strony nie będą podlegały wymianie.
.TP
.B 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ół.
.TP
.B MAP_ANONYMOUS
Mapowanie nie jest oparte na żadnym pliku; argumenty
.I fd
i
.I offset
zostaną zignorowane. Ten znacznik w połączeniu z MAP_SHARED jest
zaimplementowany w Linuksie począwszy od 2.4.
.TP
.B MAP_ANON
Alias dla MAP_ANONYMOUS. Porzucony.
.TP
.B MAP_FILE
Znacznik służący zgodności. Ignorowany.
.TP
.B MAP_32BIT
Umieszczenie mapowania w pierwszych 2GB przestrzeni adresowej procesu.
Ignorowany gdy ustawiony jest
.IR MAP_FIXED .
Znacznik ten jest obecnie wspierany jedynie przez 64-bitowe programy na
architekturze x86-64.
.LP
Niektóre systemy dokumentują dodatkowe znaczniki MAP_AUTOGROW, MAP_AUTORESRV,
MAP_COPY i MAP_LOCAL.
.LP
.I fd
powinno być prawidłowowym deskryptorem pliku; jeżeli ustawiono
MAP_ANONYMOUS, to argument ten jest ignorowany.
.LP
.I offset
powinno być wielokrotnością rozmiaru strony zwracanego przez
.BR getpagesize (2).
.LP
Pamięć zamapowana za pomocą
.B mmap
jest zachowywana poprzez
.BR fork (2)
z tymi samymi atrybutami.
.LP
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
.B 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.
.LP
Adres
.I 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
.B st_atime
zamapowanego pliku może zostać zaktualizowane w dowolnym momencie pomiędzy
.B 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.
.LP
Pola
.B st_ctime
i
.B st_mtime
pliku zamapowanego z PROT_WRITE i MAP_SHARED zostanie zaktualizowane po
zapisie do mapowanego obszaru, a przed późniejszym wywołaniem
.I msync()
ze znacznikiem MS_SYNC lub MS_ASYNC, jeśli taki wywołanie wystąpi.
.SH "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
.IR errno .
Po pomyślnym zakończeniu
.B munmap
zwraca 0, a po błędzie \-1 i ustawia
.I errno
(prawdopodobnie na EINVAL).
.SH UWAGI
To, czy
.I PROT_READ
zawiera
.IR PROT_EXEC ,
czy nie, zależy od architektury. W przenośnych programach należy zawsze
ustawiać
.IR PROT_EXEC ,
gdy planowane jest uruchamianie przez nie kodu w nowym mapowaniu.
.SH BŁĘDY
.TP
.B EBADF
.I fd
nie jest prawidłowym deskryptorem pliku (a nie ustawiono MAP_ANONYMOUS).
.TP
.B EACCES
Deskryptor pliku nie odnosi się do zwykłego pliku.
Lub zgłoszono MAP_PRIVATE, lecz
.I fd
nie jest otwarty dla odczytu.
Lub zgłoszono MAP_SHARED i ustawiono
PROT_WRITE, a
.I fd
nie jest otwarte w trybie odczytu i zapisu (O_RDWR).
Lub zgłoszono PROT_WRITE, lecz plik jest otwarty tylko do dopisywania.
.TP
.B EINVAL
Niewłaściwe
.IR start ,
.I length
lub
.IR offset .
(Np., mogą być zbyt duże lub niewyrównane do granicy strony (PAGESIZE).)
.\" jbl - not sure this actually happens ? see generic_file_mmap
.\" .TP
.\" .B ENOEXEC
.\" Plik nie mógł zostać zamapowany do odczytu.
.TP
.B ETXTBUSY
Ustawiono MAP_DENYWRITE, lecz obiekt wskazywany przez
.I fd
jest otwarty do zapisu.
.TP
.B EAGAIN
Plik został zablokowany lub zablokowano zbyt wiele pamięci.
.TP
.B ENOMEM
Brak dostępnej pamięci lub zostałaby przekroczona maksymalna liczba mapowań
dla procesu.
.B ENODEV
System plików, na którym znajduje sie podany plik nie wspiera mapowania
w pamięci.
.LP
Użycie zamapowanego obszaru może spowodować wystąpienie następujących
sygnałów:
.TP
.B SIGSEGV
Próba zapisu do obszaru podanego dla mmap jako tylko do odczytu.
.TP
.B 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).
.SH "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.

.I MAP_32BIT
jest rozszerzeniem linuksowym.
.SH "ZOBACZ TAKŻE"
.BR getpagesize (2),
.BR mmap2 (2),
.BR mremap (2),
.BR msync (2),
.BR shm_open (2),
B.O. Gallmeister, POSIX.4, O'Reilly, str. 128-129 i 389-391.
.SH "INFORMACJE O TŁUMACZENIU"
Powyższe tłumaczenie pochodzi z nieistniejącego już Projektu Tłumaczenia Manuali i 
\fImoże nie być aktualne\fR. 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:
.IP
man \-\-locale=C 2 mmap
.PP
Prosimy o pomoc w aktualizacji stron man \- więcej informacji można znaleźć pod
adresem http://sourceforge.net/projects/manpages\-pl/.