.\" -*- coding: UTF-8 -*- .\" Copyright 1993 Giorgio Ciucci (giorgio@crcc.it) .\" .\" %%%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 Sun Nov 28 17:06:19 1993, Rik Faith (faith@cs.unc.edu) .\" with material from Luigi P. Bai (lpb@softint.com) .\" Portions Copyright 1993 Luigi P. Bai .\" Modified Tue Oct 22 22:04:23 1996 by Eric S. Raymond .\" Modified, 5 Jan 2002, Michael Kerrisk .\" Modified, 19 Sep 2002, Michael Kerrisk .\" Added SHM_REMAP flag description .\" Modified, 27 May 2004, Michael Kerrisk .\" Added notes on capability requirements .\" Modified, 11 Nov 2004, Michael Kerrisk .\" Language and formatting clean-ups .\" Changed wording and placement of sentence regarding attachment .\" of segments marked for destruction .\" .\" FIXME . Add an example program to this page. .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH SHMOP 2 "2 sierpnia 2019 r." Linux "Podręcznik programisty Linuksa" .SH NAZWA shmat, shmdt \- operacje na segmentach pamięci dzielonej Systemu V .SH SKŁADNIA .nf \fB#include \fP \fB#include \fP .PP \fBvoid *shmat(int \fP\fIshmid\fP\fB, const void *\fP\fIshmaddr\fP\fB, int \fP\fIshmflg\fP\fB);\fP .PP \fBint shmdt(const void *\fP\fIshmaddr\fP\fB);\fP .fi .SH OPIS .SS shmat() \fBshmat\fP() dołącza segment pamięci dzielonej Systemu\ V identyfikowany przez \fIshmid\fP do przestrzeni adresowej procesu, który ją wywołał. Adres, pod którym segment ma być widoczny jest przekazywany w parametrze \fIshmaddr\fP, przy czym system może przetworzyć ten adres w następujący sposób: .IP * 3 Jeśli \fIshmaddr\fP jest równy NULL, to system sam wybierze odpowiedni wyrównany do rozmiaru strony (nieużywany) adres, pod którym segment będzie widoczny. .IP * Jeśli \fIshmaddr\fP jest różny od NULL i w \fIshmflg\fP przekazany został znacznik \fBSHM_RND\fP, wówczas segment zostanie dołączony pod adresem \fIshmaddr\fP zaokrąglonym w dół do wielokrotności \fBSHMLBA\fP. .IP * W innym przypadku \fIshmaddr\fP musi być wyrównanym do granicy strony adresem, pod którym nastąpi dołączenie segmentu. .PP Oprócz \fBSHM_RND\fP można określić\ następujące flagi w argumencie maski bitowej \fIshmflg\fP: .TP \fBSHM_EXEC\fP (charakterystyczne dla Linuksa; od Linuksa w wersji 2.6.9) Pozwala na wykonanie zawartości segmentu. Wywołujący musi mieć prawo wykonania segmentu. .TP \fBSHM_RDONLY\fP Dołącza segment do dostępu tylko do odczytu. Proces wywołujący musi mieć prawa odczytu segmentu. Jeśli flaga nie jest określona, w dołączanym segmencie możliwy jest dostęp do odczytu jak i zapisu, przy czym proces musi mieć prawa do odczytu i zapisu segmentu. Nie istnieje pojęcie segmentu pamięci dzielonej tylko do zapisu. .TP \fBSHM_REMAP\fP (charakterystyczne dla Linuksa) Ten znacznik oznacza, że odwzorowanie tego segmentu powinno zastąpić jakiekolwiek istniejące wcześniej odwzorowanie w zakresie rozpoczynającym się od \fIshmaddr\fP i rozciągającym się na rozmiar segmentu. (Normalnie, gdy odwzorowanie w tym zakresie adresów już istnieje, powinien wystąpić błąd \fBEINVAL\fP). W tym przypadku \fIshmaddr\fP nie może być równy NULL. .PP Wartość \fBbrk\fP(2) procesu wywołującego nie jest zmieniana podczas dołączania segmentu. Segment zostanie automatycznie odłączony, gdy proces się zakończy. Ten sam segment może być dołączony do przestrzeni adresowej procesu jako "tylko do odczytu" lub "do odczytu i zapisu" więcej niż raz. .PP Pomyślne wywołanie \fBshmdt\fP aktualizuje pola struktury \fIshmid_ds\fP (patrz \fBshmctl\fP(2)) opisującej segment w następujący sposób: .IP \fIshm_atime\fP przypisywany jest bieżący czas. .IP \fIshm_lpid\fP jest ustawiane na identyfikator procesu wywołującego. .IP .\" \fIshm_nattch\fP jest zwiększane o jeden. .SS shmdt() \fBshmdt\fP odłącza segment pamięci dzielonej odwzorowany pod adresem podanym w \fIshmaddr\fP z przestrzeni adresowej procesu wywołującego tę funkcję. Przekazany funkcji w parametrze \fIshmaddr\fP adres musi być równy adresowi zwróconemu wcześniej przez wywołanie \fBshmat\fP(). .PP Pomyślne wywołanie \fBshmdt\fP aktualizuje pola struktury \fIshmid_ds\fP opisującej segment w następujący sposób: .IP \fIshm_dtime\fP przypisywany jest bieżący czas. .IP \fIshm_lpid\fP jest ustawiane na identyfikator procesu wywołującego. .IP \fIshm_nattch\fP jest zmniejszane o jeden. Jeśli pole to osiągnie 0 i segment jest zaznaczony do usunięcia, wówczas zostanie on usunięty. .SH "WARTOŚĆ ZWRACANA" Jeśli się powiedzie, \fBshmat\fP() zwraca adres dołączonego segmentu pamięci dzielonej; w razie błędu zwracane jest \fI(void\ *)\ \-1\fP, a zmienna \fIerrno\fP wskazuje na przyczynę błędu. .PP Jeśli się powiedzie, \fBshmdt\fP() zwraca 0; w razie błędu zwracane jest \-1, a zmienna \fIerrno\fP wskazuje na przyczynę błędu. .SH BŁĘDY Gdy \fBshmat\fP() zakończy się niepomyślnie, zmiennej \fIerrno\fP przypisywana jest jedna z następujących wartości: .TP \fBEACCES\fP Proces wywołujący nie ma wystarczających uprawnień do dołączenia segmentu w żądany sposób oraz nie ma ustawionego atrybutu \fBCAP_IPC_OWNER\fP w tej przestrzeni nazw użytkownika, która odpowiada za przestrzeń nazw IPC. .TP \fBEIDRM\fP \fIshmid\fP wskazuje na usunięty identyfikator. .TP \fBEINVAL\fP Niewłaściwa wartość parametru \fIshmid\fP, niewyrównana (do granicy strony i nie podano \fBSHM_RND\fP) lub niepoprawna wartość \fIshmaddr\fP albo nieudane dołączenie pod adresem \fIshmaddr\fP lub został podany znacznik \fBSHM_REMAP\fP, podczas gdy \fIshmaddr\fP było równe NULL. .TP \fBENOMEM\fP Brak pamięci na deskryptor lub tablice stron. .PP Gdy \fBshmdt\fP() zakończy się niepomyślnie, zmiennej \fIerrno\fP przypisywana jest jedna z następujących wartości: .TP \fBEINVAL\fP .\" The following since 2.6.17-rc1: Żaden segment pamięci dzielonej nie jest podłączony pod adresem \fIshmaddr\fP lub \fIshmaddr\fP nie jest wyrównany do granicy strony. .SH "ZGODNE Z" .\" SVr4 documents an additional error condition EMFILE. POSIX.1\-2001, POSIX.1\-2008, SVr4. .PP W SVID 3 (lub być może wcześniejszym) typ parametru \fIshmaddr\fP został zmieniony z \fIchar\ *\fP na \fIconst void\ *\fP, a typ wyniku zwracanego przez \fBshmat\fP() z \fIchar\ *\fP na \fIvoid\ *\fP. .SH UWAGI .PP W wyniku wywołania \fBfork\fP(2) proces potomny dziedziczy dołączone segmenty pamięci dzielonej. .PP Po wykonaniu \fBexec\fP(2) wszystkie dołączone segmenty pamięci dzielonej są odłączane od procesu. .PP Po wykonaniu \fB_exit\fP(2) wszystkie dołączone segmenty pamięci dzielonej są odłączane od procesu. .PP Używanie \fBshmat\fP() z \fIshmaddr\fP równym NULL jest zalecaną i przenośną metodą dołączania segmentu pamięci dzielonej. Trzeba jednak być świadomym, że ta metoda dołączania segmentu pamięci dzielonej może spowodować jego dołączenie pod różnymi adresami w różnych procesach. W związku z tym wszystkie wskaźniki obsługiwane w pamięci dzielonej muszą być względne (zazwyczaj względem adresu początkowego segmentu), nie zaś bezwzględne. .PP Linux pozwala na dołączenie segmentu pamięci dzielonej, nawet jeśli już został zaznaczony do usunięcia. Jednakże POSIX.1 nie określa takiego zachowania i wiele innych implementacji go nie obsługuje. .PP Na wywołanie \fBshmat\fP() wpływa następujący parametr systemowy: .TP \fBSHMLBA\fP Wielokrotność dolnej granicy adresu segmentu. Podczas bezpośredniego wskazania dołączonego adresu w wywołaniu do \fBshmat\fP(), wywołujący powinien się upewnić, że adres jest wielokrotnością tej wartości. Jest to konieczne w przypadku niektórych architektur, aby zapewnić dobrą wydajność pamięci podręcznej procesora lub aby zapewnić, że różne dołączenia tego samego segmentu mają spójne widoki w pamięci podręcznej procesora. \fBSHMLBA\fP jest zwykle jakąś wielokrotnością systemowego rozmiaru strony. (W wielu architekturach linuksowych wartość \fBSHMLBA\fP jest taka sama, jak systemowy rozmiar strony). .PP Aktualna implementacja nie ma wewnętrznego ograniczenia na liczbę segmentów pamięci dzielonej dołączanych do jednego procesu (\fBSHMSEG\fP). .SH "ZOBACZ TAKŻE" \fBbrk\fP(2), \fBmmap\fP(2), \fBshmctl\fP(2), \fBshmget\fP(2), \fBcapabilities\fP(7), \fBshm_overview\fP(7), \fBsysvipc\fP(7) .SH "O STRONIE" Angielska wersja tej strony pochodzi z wydania 5.04 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/. .SH TŁUMACZENIE Autorami polskiego tłumaczenia niniejszej strony podręcznika są: Rafał Lewczuk , Andrzej Krzysztofowicz , Robert Luberda i Michał Kułach . 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. Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres .MT manpages-pl-list@lists.sourceforge.net .ME .