.\" -*- coding: UTF-8 -*- .\" Copyright (c) 1993 Luigi P. Bai (lpb@softint.com) July 28, 1993 .\" and Copyright 1993 Giorgio Ciucci .\" and Copyright 2004, 2005 Michael Kerrisk .\" .\" %%%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 .\" Modified 1993-11-28, Giorgio Ciucci .\" Modified 1997-01-31, Eric S. Raymond .\" Modified 2001-02-18, Andries Brouwer .\" Modified 2002-01-05, 2004-05-27, 2004-06-17, .\" Michael Kerrisk .\" Modified 2004-10-11, aeb .\" Modified, Nov 2004, Michael Kerrisk .\" 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. .\" 2018-03-20, dbueso: Added SHM_STAT_ANY description. .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH SHMCTL 2 "21 grudnia 2020 r." Linux "Podręcznik programisty Linuksa" .SH NAZWA shmctl \- sterowanie segmentami pamięci dzielonej Systemu V .SH SKŁADNIA .ad l \fB#include \fP .br \fB#include \fP .PP \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\fP: .PP .in +4n .EX struct shmid_ds { struct ipc_perm shm_perm; /* Ownership and permissions */ size_t shm_segsz; /* Size of segment (bytes) */ time_t shm_atime; /* Last attach time */ time_t shm_dtime; /* Last detach time */ time_t shm_ctime; /* Creation time/time of last modification via shmctl() */ pid_t shm_cpid; /* PID of creator */ pid_t shm_lpid; /* PID of last shmat(2)/shmdt(2) */ shmatt_t shm_nattch; /* No. of current attaches */ ... }; .EE .in .PP Pola struktury \fIshmid_ds\fP są następujące: .TP 12 \fIshm_perm\fP This is an \fIipc_perm\fP structure (see below) that specifies the access permissions on the shared memory segment. .TP \fIshm_segsz\fP Rozmiar segmentu pamięci wspólnej w bajtach. .TP \fIshm_atime\fP Time of the last \fBshmat\fP(2) system call that attached this segment. .TP \fIshm_dtime\fP Time of the last \fBshmdt\fP(2) system call that detached tgis segment. .TP \fIshm_ctime\fP Time of creation of segment or time of the last \fBshmctl\fP() \fBIPC_SET\fP operation. .TP \fIshm_cpid\fP Identyfikator procesu, który utworzył ten segment pamięci wspólnej. .TP \fIshm_lpid\fP ID of the last process that executed a \fBshmat\fP(2) or \fBshmdt\fP(2) system call on this segment. .TP \fIshm_nattch\fP Number of processes that have this segment attached. .PP Struktura \fIipc_perm\fP jest zdefiniowana następująco (wyróżnione pola można ustawić za pomocą \fBIPC_SET\fP): .PP .in +4n .EX 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 */ }; .EE .in .PP The least significant 9 bits of the \fImode\fP field of the \fIipc_perm\fP structure define the access permissions for the shared memory segment. The permission bits are as follows: .TS l l. 0400 Read by user 0200 Write by user 0040 Read by group 0020 Write by group 0004 Read by others 0002 Write by others .TE .PP Bits 0100, 0010, and 0001 (the execute bits) are unused by the system. (It is not necessary to have execute permission on a segment in order to perform a \fBshmat\fP(2) call with the \fBSHM_EXEC\fP flag.) .PP Poprawne wartości parametru \fIcmd\fP to: .TP \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 Write the values of some members of the \fIshmid_ds\fP structure pointed to by \fIbuf\fP to the kernel data structure associated with this shared memory segment, updating also its \fIshm_ctime\fP member. .IP The following fields are updated: \fIshm_perm.uid\fP, \fIshm_perm.gid\fP, and (the least significant 9 bits of) \fIshm_perm.mode\fP. .IP The effective UID of the calling process must match the owner (\fIshm_perm.uid\fP) or creator (\fIshm_perm.cuid\fP) of the shared memory segment, or the caller must be privileged. .TP \fBIPC_RMID\fP Zaznacza segment do usunięcia. Zostanie on naprawdę usunięty jedynie 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 \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\fP, pod warunkiem, że zdefiniowano również makro \fB_GNU_SOURCE\fP: .IP .in +4n .EX 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 */ }; .EE .in .IP 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\fP, pod warunkiem, że zdefiniowano również makro \fB_GNU_SOURCE\fP: .IP .in +4n .EX 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 */ }; .EE .in .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. .TP \fBSHM_STAT_ANY\fP (Linux\-specific, since Linux 4.17) Return a \fIshmid_ds\fP structure as for \fBSHM_STAT\fP. However, \fIshm_perm.mode\fP is not checked for read access for \fIshmid\fP, meaning that any user can employ this operation (just as any user may read \fI/proc/sysvipc/shm\fP to obtain the same information). .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: .TP \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 lub \fBSHM_STAT_ANY\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ą. .PP W razie wystąpienia błędu zwracane jest \-1 i ustawiana jest odpowiednia wartość zmiennej \fIerrno\fP. .SH BŁĘDY .TP \fBEACCES\fP \fBIPC_STAT\fP or \fBSHM_STAT\fP is requested and \fIshm_perm.mode\fP does not allow read access for \fIshmid\fP, and the calling process does not have the \fBCAP_IPC_OWNER\fP capability in the user namespace that governs its IPC namespace. .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 lub \fBSHM_STAT_ANY\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). .IP 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. POSIX.1\-2001, POSIX.1\-2008, SVr4. .SH UWAGI .\" Like Linux, the FreeBSD man pages still document .\" the inclusion of these header files. Dołączenie \fI\fP i \fI\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. .PP 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. .PP 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ć. .PP 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), \fBsysvipc\fP(7) .SH "O STRONIE" Angielska wersja tej strony pochodzi z wydania 5.10 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 \%https://www.kernel.org/doc/man\-pages/. .PP .SH TŁUMACZENIE Autorami polskiego tłumaczenia niniejszej strony podręcznika są: Rafał Lewczuk , Andrzej Krzysztofowicz , Robert Luberda i Michał Kułach . .PP Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać zapoznając się z .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License w wersji 3 .UE lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI. .PP Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej .MT manpages-pl-list@lists.sourceforge.net .ME .