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 325 326 327
|
.\" Copyright (c) 1993 Luigi P. Bai (lpb@softint.com) July 28, 1993
.\" and Copyright 1993 Giorgio Ciucci <giorgio@crcc.it>
.\" and Copyright 2004, 2005 Michael Kerrisk <mtk.manpages@gmail.com>
.\"
.\" %%%LICENSE_START(VERBATIM)
.\" 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.
.\" %%%LICENSE_END
.\"
.\" Modified 1993-07-28, Rik Faith <faith@cs.unc.edu>
.\" Modified 1993-11-28, Giorgio Ciucci <giorgio@crcc.it>
.\" Modified 1997-01-31, Eric S. Raymond <esr@thyrsus.com>
.\" Modified 2001-02-18, Andries Brouwer <aeb@cwi.nl>
.\" Modified 2002-01-05, 2004-05-27, 2004-06-17,
.\" Michael Kerrisk <mtk.manpages@gmail.com>
.\" Modified 2004-10-11, aeb
.\" Modified, Nov 2004, Michael Kerrisk <mtk.manpages@gmail.com>
.\" Language and formatting clean-ups
.\" Updated shmid_ds structure definitions
.\" Added information on SHM_DEST and SHM_LOCKED flags
.\" Noted that CAP_IPC_LOCK is not required for SHM_UNLOCK
.\" since kernel 2.6.9
.\" Modified, 2004-11-25, mtk, notes on 2.6.9 RLIMIT_MEMLOCK changes
.\" 2005-04-25, mtk -- noted aberrant Linux behavior w.r.t. new
.\" attaches to a segment that has already been marked for deletion.
.\" 2005-08-02, mtk: Added IPC_INFO, SHM_INFO, SHM_STAT descriptions.
.\"
.\"*******************************************************************
.\"
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
.\" This file is distributed under the same license as original manpage
.\" Copyright of the original manpage:
.\" Copyright © 1993 Luigi P. Bai, 1993 Giorgio Ciucci, 2004,2005 Michael Kerrisk
.\" Copyright © of Polish translation:
.\" Rafał Lewczuk (PTM) <R.Lewczuk@elka.pw.edu.p>, 1999.
.\" Andrzej Krzysztofowicz (PTM) <ankry@mif.pg.gda.pl>, 2002.
.\" Robert Luberda <robert@debian.org>, 2013.
.\" Michał Kułach <michal.kulach@gmail.com>, 2013, 2014.
.TH SHMCTL 2 2014\-02\-07 Linux "Podręcznik programisty Linuksa"
.SH NAZWA
shmctl \- sterowanie segmentami pamięci dzielonej Systemu V
.SH SKŁADNIA
.ad l
\fB#include <sys/ipc.h>\fP
.br
\fB#include <sys/shm.h>\fP
.sp
\fBint shmctl(int \fP\fIshmid\fP\fB, int \fP\fIcmd\fP\fB, struct shmid_ds *\fP\fIbuf\fP\fB);\fP
.ad b
.SH OPIS
\fBshmctl\fP() wykonuje operację określoną przez parametr \fIcmd\fP na segmencie
pamięci dzielonej Systemu\ V o identyfikatorze \fIshmid\fP.
.PP
Parametr \fIbuf\fP jest wskaźnikiem do struktury \fIshmid_ds\fP, zdefiniowanej
następująco w \fI<sys/shm.h>\fP:
.PP
.in +4n
.nf
struct shmid_ds {
struct ipc_perm shm_perm; /* Prawa dostępu */
size_t shm_segsz; /* Rozmiar segmentu (w bajtach) */
time_t shm_atime; /* Czas ostatniego dołączenia */
time_t shm_dtime; /* Czas ostatniego odłączenia */
time_t shm_ctime; /* Czas ostatniej modyfikacji */
pid_t shm_cpid; /* PID twórcy segmentu */
pid_t shm_lpid; /* PID ostatniego shmat(2)/shmdt(2) */
shmatt_t shm_nattch; /* Liczba dołączeń */
...
};
.fi
.in
.PP
Struktura \fIipc_perm\fP jest zdefiniowana następująco (wyróżnione pola można
ustawić za pomocą \fBIPC_SET\fP):
.PP
.in +4n
.nf
struct ipc_perm {
key_t __key; /* Klucz podany w msgget() */
uid_t \fBuid\fP; /* Efektywny UID właściciela */
gid_t \fBgid\fP; /* Efektywny GID właściciela */
uid_t cuid; /* Efektywny UID twórcy */
gid_t cgid; /* Efektywny GID twórcy */
unsigned short \fBmode\fP; /* \fBUprawnienia\fP + znaczniki */
SHM_DEST i SHM_LOCKED */
unsigned short __seq; /* Numer sekwencji */
};
.fi
.in
.PP
Poprawne wartości parametru \fIcmd\fP to:
.br
.TP 10
\fBIPC_STAT\fP
Kopiuje informacje ze struktury kontrolnej jądra skojarzonej z \fIshmid\fP do
struktury wskazywanej przez \fIbuf\fP. Wywołujący musi mieć uprawnienie odczytu
segmentu pamięci dzielonej.
.TP
\fBIPC_SET\fP
Zapisuje wartości niektórych pól struktury \fIshmid_ds\fP wskazywanej przez
\fIbuf\fP do struktury danych jądra powiązanej z tym segmentem pamięci
dzielonej, aktualizując także pole \fIshm_ctime\fP. Następujące pola mogą być
zmieniane: \fIshm_perm.uid\fP, \fIshm_perm.gid\fP oraz (9 najmniej znaczących
bitów pola) \fIshm_perm.mode\fP. Efektywny identyfikator użytkownika procesu
wywołującego musi być równy identyfikatorowi właściciela (\fIshm_perm.uid\fP)
lub twórcy (\fIshm_perm.cuid\fP) segmentu pamięci dzielonej albo proces
wywołujący musi być uprzywilejowany.
.TP
\fBIPC_RMID\fP
Zaznacza segment do usunięcia. Zostanie on naprawdę usunięty w momencie, w
którym ostatni używający go proces się od niego odłączy (tj. gdy pole
\fIshm_nattch\fP struktury \fIshmid_ds\fP opisującej segment osiągnie wartość
zero). Użytkownik musi być właścicielem segmentu, jego twórcą lub
użytkownikiem uprzywilejowanym. Argument \fIbuf\fP jest ignorowany.
.IP
Jeśli segment został zaznaczony do usunięcia, to zostanie ustawiony
(niestandardowy) znacznik \fBSHM_DEST\fP pola \fIshm_perm.mode\fP struktury danych
zwracanej przez \fBIPC_STAT\fP.
.IP
Wywołujący \fImusi\fP zapewnić, że segment po użyciu zostanie na pewno
usunięty. W przeciwnym przypadku pamięć lub obszar wymiany zajmowane przez
segment nie zostaną zwolnione.
.IP
Proszę zapoznać się również z opisem z \fI/proc/sys/kernel/shm_rmid_forced\fP w
\fBproc\fP(5).
.TP 10
\fBIPC_INFO\fP (specyficzne dla Linuksa)
Zwraca w strukturze, na którą wskazuje \fIbuf\fP, informacje o systemowych
ograniczeniach i parametrach pamięci dzielonej. Struktura jest typu
\fIshminfo\fP (dlatego wymagane jest rzutowanie) i jest zdefiniowana w
\fI<sys/shm.h>\fP, pod warunkiem, że zdefiniowano również makro
\fB_GNU_SOURCE\fP:
.nf
.in +4n
struct shminfo {
unsigned long shmmax; /* Maksymalny rozmiar segmentu */
unsigned long shmmin; /* Minimalny rozmiar segmentu;
zawsze 1 */
unsigned long shmmni; /* Maksymalna liczba segmentów */
unsigned long shmseg; /* Maksymalna liczba segmentów,
które proces może podłączyć;
nieużywane przez jądro */
unsigned long shmall; /* Maksymalna liczba stron
pamięci dzielonej, globalna
dla systemu */
};
.in
.fi
Ustawienia \fIshmmni\fP, \fIshmmax\fP oraz \fIshmall\fP można zmienić za pomocą
plików \fI/proc\fP o nazwach takich samych, jak nazwy tych ustawień; szczegóły
można znaleźć w podręczniku \fBproc\fP(5).
.TP
\fBSHM_INFO\fP (specyficzne dla Linuksa)
Zwraca strukturę \fIshm_info\fP, której pola zawierają informacje o zasobach
systemowych używanych przez pamięć dzieloną. Struktura jest zdefiniowana w
\fI<sys/shm.h>\fP, pod warunkiem, że zdefiniowano również makro
\fB_GNU_SOURCE\fP:
.nf
.in +4n
struct shm_info {
int used_ids; /* Liczba istniejących
obecnie segmentów */
unsigned long shm_tot; /* Całkowita liczba stron
pamięci dzielonej */
unsigned long shm_rss; /* Liczba stron pamięci dzielonej
w fizycznej pamięci */
unsigned long shm_swp; /* Liczba stron pamięci dzielonej
w przestrzeni wymiany */
unsigned long swap_attempts;
/* Nieużywane od Linuksa 2.4 */
unsigned long swap_successes;
/* Nieużywane od Linuksa 2.4 */
};
.in
.fi
.TP
\fBSHM_STAT\fP (specyficzne dla Linuksa)
Zwraca strukturę \fIshmid_ds\fP, taką jak dla \fBIPC_STAT\fP. Jednakże parametr
\fIshmid\fP nie jest identyfikatorem segmentu, ale indeksem wewnętrznej tablicy
jądra przechowującej informacje o wszystkich segmentach pamięci dzielonej w
systemie.
.PP
Proces wywołujący może zabronić lub zezwolić na wymianę obszarów pamięci
zajmowanych przez segment, używając następujących wartości \fIcmd\fP:
.br
.TP 10
\fBSHM_LOCK\fP (specyficzne dla Linuksa)
Zapobiega umieszczaniu segmentu pamięci dzielonej w przestrzeni wymiany. The
caller must fault in any pages that are required to be present after locking
is enabled. Jeśli segment jest zablokowany, to zostanie ustawiony
(niestandardowy) znacznik \fBSHM_LOCKED\fP pola \fIshm_perm.mode\fP struktury
danych zwracanej przez \fBIPC_STAT\fP.
.TP
\fBSHM_UNLOCK\fP (specyficzne dla Linuksa)
Odblokowuje segment, zezwalając na umieszczenie go w przestrzeni wymiany.
.PP
.\" There was some weirdness in 2.6.9: SHM_LOCK and SHM_UNLOCK could
.\" be applied to a segment, regardless of ownership of the segment.
.\" This was a botch-up in the move to RLIMIT_MEMLOCK, and was fixed
.\" in 2.6.10. MTK, May 2005
W jądrach wcześniejszych niż 2.6.10 tylko proces uprzywilejowany mógł
stosować \fBSHM_LOCK\fP i \fBSHM_UNLOCK\fP. Od jądra 2.6.10 nieuprzywilejowany
proces może wywołać te operacje, pod warunkiem że efektywny identyfikator
użytkownika odpowiada identyfikatorowi twórcy lub właściciela segmentu oraz
(w przypadku \fBSHM_LOCK\fP) ilość pamięci do zablokowania mieści się w
ograniczeniu zasobów \fBRLIMIT_MEMLOCK\fP (patrz \fBsetrlimit\fP(2)).
.SH "WARTOŚĆ ZWRACANA"
Pomyślnie zakończone operacje \fBIPC_INFO\fP i \fBSHM_INFO\fP zwracają indeks
najwyższego używanego wpisu w wewnętrznej tablicy jądra przechowującej
informacje o wszystkich segmentach pamięci dzielonej. (Informacji tej można
użyć w operacjach \fBSHM_STAT\fP, aby otrzymać informacje o wszystkich
segmentach pamięci dzielonej w systemie). Pomyślnie zakończona operacja
\fBSHM_STAT\fP zwraca identyfikator segmentu pamięci dzielonej o indeksie
przekazanym w \fIshmid\fP. Pozostałe operacje zwracają 0, jeżeli tylko się
powiodą.
W razie wystąpienia błędu zwracane jest \-1 i ustawiana jest odpowiednia
wartość zmiennej \fIerrno\fP.
.SH BŁĘDY
.TP
\fBEACCES\fP
Wydano polecenie \fBIPC_STAT\fP lub \fBSHM_STAT\fP, a prawa dostępu określone w
\fIshm_perm.modes\fP nie pozwalają na odczyt segmentu \fIshmid\fP i proces
wywołujący nie ma ustawionego atrybutu \fBCAP_IPC_OWNER\fP.
.TP
\fBEFAULT\fP
Parametr \fIcmd\fP ma wartość \fBIPC_SET\fP lub \fBIPC_STAT\fP, ale adres wskazany
przez \fIbuf\fP jest niedostępny.
.TP
\fBEIDRM\fP
\fIshmid\fP wskazuje na usunięty identyfikator.
.TP
\fBEINVAL\fP
\fIshmid\fP nie jest poprawnym identyfikatorem lub \fIcmd\fP nie jest poprawnym
poleceniem. Albo: w przypadku operacji \fBSHM_STAT\fP wartość indeksu podana w
parametrze \fIshmid\fP odwoływała się do obecnie nieużywanego elementu tablicy.
.TP
\fBENOMEM\fP
(W jądrach wcześniejszych niż 2.6.9) podano \fBSHM_LOCK\fP, a rozmiar segmentu
do zablokowania oznaczałby przekroczenie ograniczenia na całkowitą liczbę
bajtów w pamięci dzielonej przypadającą na rzeczywisty identyfikator
użytkownika procesu wywołującego. Ograniczenie to jest opisywane przez
miękki limit zasobu \fBRLIMIT_MEMLOCK\fP (patrz \fBsetrlimit\fP(2)).
.TP
\fBEOVERFLOW\fP
Próbowano wywołać polecenie \fBIPC_STAT\fP, a wartość GID lub UID jest za duża,
aby ją umieścić w strukturze wskazywanej przez \fIbuf\fP.
.TP
\fBEPERM\fP
Próbowano wywołać polecenie \fBIPC_SET\fP lub \fBIPC_RMID\fP, ale efektywny UID
właściciela wywołującego procesu nie odpowiada twórcy segmentu (określonemu
w \fIshm_perm.cuid\fP), właścicielowi segmentu (określonemu w \fIshm_perm.uid\fP),
a proces nie jest uprzywilejowany (Linux: nie ma ustawionego atrybutu
\fBCAP_SYS_ADMIN\fP).
Lub (w jądrach starszych niż 2.6.9) podano \fBSHM_LOCK\fP lub \fBSHM_UNLOCK\fP,
ale proces nie był uprzywilejowany (Linux: nie miał ustawionego atrybutu
\fBCAP_IPC_LOCK\fP). (Od wersji Linuksa 2.6.9 ten błąd może wystąpić również
gdy \fBRLIMIT_MEMLOCK\fP jest równy 0 i proces wywołujący nie jest
uprzywilejowany).
.SH "ZGODNE Z"
.\" SVr4 documents additional error conditions EINVAL,
.\" ENOENT, ENOSPC, ENOMEM, EEXIST. Neither SVr4 nor SVID documents
.\" an EIDRM error condition.
SVr4, POSIX.1\-2001.
.SH UWAGI
.\" Like Linux, the FreeBSD man pages still document
.\" the inclusion of these header files.
Dołączenie \fI<sys/types.h>\fP i \fI<sys/ipc.h>\fP nie jest
wymagane na Linuksie ani przez żadną z wersji POSIX. Jednak niektóre stare
implementacje wymagają dołączenia tych plików nagłówkowych, SVID również
dokumentuje ich dołączenie. Aplikacje które mają być przenośne na tego typu
stare systemy mogą wymagać dołączenia omawianych plików nagłówkowych.
Operacje \fBIPC_INFO\fP, \fBSHM_STAT\fP oraz \fBSHM_INFO\fP są używane przez program
\fBipcs\fP(1) w celu dostarczenia informacji o zajmowanych zasobach. W
przyszłości operacje te mogą zostać zmodyfikowane lub przeniesione do
interfejsu systemu plików \fI/proc\fP.
Linux pozwala na dołączenie (\fBshmat\fP(2)) segmentu pamięci dzielonej, który
już został zaznaczony do usunięcia za pomocą \fIshmctl(IPC_RMID)\fP. Ta
właściwość nie jest dostępna w innych implementacjach Uniksa; przenośne
aplikacje nie powinny od niej zależeć.
Niektóre pola struktury \fIstruct shmid_ds\fP były w Linuksie 2.2 typu
\fIshort\fP, ale stały się typu \fIlong\fP w Linuksie 2.4. Aby to wykorzystać,
powinna wystarczyć rekompilacja pod glibc\-2.1.91 lub nowszą. (Jądro
rozróżnia stare wywołania od nowych za pomocą znacznika \fBIPC_64\fP w \fIcmd\fP).
.SH "ZOBACZ TAKŻE"
\fBmlock\fP(2), \fBsetrlimit\fP(2), \fBshmget\fP(2), \fBshmop\fP(2), \fBcapabilities\fP(7),
\fBsvipc\fP(7)
.SH "O STRONIE"
Angielska wersja tej strony pochodzi z wydania 3.71 projektu Linux
\fIman\-pages\fP. Opis projektu, informacje dotyczące zgłaszania błędów, oraz
najnowszą wersję oryginału można znaleźć pod adresem
\%http://www.kernel.org/doc/man\-pages/.
.SH TŁUMACZENIE
Autorami polskiego tłumaczenia niniejszej strony podręcznika man są:
Rafał Lewczuk (PTM) <R.Lewczuk@elka.pw.edu.p>,
Andrzej Krzysztofowicz (PTM) <ankry@mif.pg.gda.pl>,
Robert Luberda <robert@debian.org>
i
Michał Kułach <michal.kulach@gmail.com>.
.PP
Polskie tłumaczenie jest częścią projektu manpages-pl; uwagi, pomoc, zgłaszanie błędów na stronie http://sourceforge.net/projects/manpages-pl/. Jest zgodne z wersją \fB 3.71 \fPoryginału.
|