.\" -*- coding: UTF-8 -*-
'\" t
.\" Copyright 1993 Giorgio Ciucci (giorgio@crcc.it)
.\" and Copyright 2004, 2005 Michael Kerrisk <mtk.manpages@gmail.com>
.\"
.\" SPDX-License-Identifier: Linux-man-pages-copyleft
.\"
.\" Modified Tue Oct 22 08:11:14 EDT 1996 by Eric S. Raymond <esr@thyrsus.com>
.\" Modified Sun Feb 18 01:59:29 2001 by Andries E. Brouwer <aeb@cwi.nl>
.\" Modified, 27 May 2004, Michael Kerrisk <mtk.manpages@gmail.com>
.\"     Added notes on CAP_IPC_OWNER requirement
.\" Modified, 17 Jun 2004, Michael Kerrisk <mtk.manpages@gmail.com>
.\"     Added notes on CAP_SYS_ADMIN requirement for IPC_SET and IPC_RMID
.\" Modified, 11 Nov 2004, Michael Kerrisk <mtk.manpages@gmail.com>
.\"	Language and formatting clean-ups
.\"	Added msqid_ds and ipc_perm structure definitions
.\" 2005-08-02, mtk: Added IPC_INFO, MSG_INFO, MSG_STAT descriptions
.\" 2018-03-20, dbueso: Added MSG_STAT_ANY description.
.\"
.\"*******************************************************************
.\"
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
.TH msgctl 2 "2 maja 2024 r." "Linux man\-pages 6.9.1" 
.SH NAZWA
msgctl \- steruje kolejkami komunikatów Systemu V
.SH BIBLIOTEKA
Standardowa biblioteka C (\fIlibc\fP, \fI\-lc\fP)
.SH SKŁADNIA
.nf
\fB#include <sys/msg.h>\fP
.P
\fBint msgctl(int \fP\fImsqid\fP\fB, int \fP\fIop\fP\fB, struct msqid_ds *\fP\fIbuf\fP\fB);\fP
.fi
.SH OPIS
\fBmsgctl\fP() wykonuje operację określoną przez parametr \fIop\fP na kolejce
komunikatów Systemu\ V o identyfikatorze \fImsqid\fP.
.P
Struktura danych \fImsqid_ds\fP jest zdefiniowana w \fI<sys/msg.h>\fP
następująco:
.P
.in +4n
.EX
struct msqid_ds {
    struct ipc_perm msg_perm;   /* Własności i uprawnienia */
    time_t          msg_stime;  /* Czas ostatniego msgsnd(2) */
    time_t          msg_rtime;  /* Czas ostatniego msgrcv(2) */
    time_t          msg_ctime;  /* Czas utworzenia lub ostatniej
                                   zmiany przez msgctl() */
    unsigned long   msg_cbytes; /* # bajtów w kolejce */
    msgqnum_t       msg_qnum;   /* # liczba komunikatów w kolejce */
    msglen_t        msg_qbytes; /* Maksymalna # bajtów w kolejce */
    pid_t           msg_lspid;  /* PID ostatniego msgsnd(2) */
    pid_t           msg_lrpid;  /* PID ostatniego msgrcv(2) */
};
.EE
.in
.P
Pola struktury \fImsqid_ds\fP są następujące:
.TP  11
\fImsg_perm\fP
Jest to struktura \fIipc_perm\fP (zob. niżej), która określa prawa dostępu do
kolejki komunikatów.
.TP 
\fImsg_stime\fP
Czas ostatniego wykonania funkcji systemowej \fBmsgsnd\fP(2).
.TP 
\fImsg_rtime\fP
Czas ostatniego wykonania funkcji systemowej \fBmsgrcv\fP(2).
.TP 
\fImsg_ctime\fP
Czas utworzenia kolejki lub czas ostatniej operacji \fBIPC_SET\fP \fBmsgctl\fP().
.TP 
\fImsg_cbytes\fP
Liczba bajtów we wszystkich komunikatach znajdujących się aktualnie w
kolejce. Jest to niestandardowe rozszerzenie Linuksa, które nie jest
określone przez POSIX.
.TP 
\fImsg_qnum\fP
Liczba komunikatów znajdujących się aktualnie w kolejce.
.TP 
\fImsg_qbytes\fP
Maksymalna liczba bajtów tekstu komunikatu, na jaką pozwala kolejka.
.TP 
\fImsg_lspid\fP
Identyfikator procesu, który ostatni wykonał funkcję systemową \fBmsgsnd\fP(2).
.TP 
\fImsg_lrpid\fP
identyfikator procesu, który ostatni wykonał funkcję systemową \fBmsgrcv\fP(2).
.P
Struktura \fIipc_perm\fP jest zdefiniowana następująco (wyróżnione pola można
ustawić za pomocą \fBIPC_SET\fP):
.P
.in +4n
.EX
struct ipc_perm {
    key_t          __key;       /* Klucz podany w msgget(2) */
    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;        /* Uprawnienia */
    unsigned short __seq;       /* Numer sekwencji */
};
.EE
.in
.P
Najmniej znaczące 9 bitów pola \fImode\fP struktury \fIipc_perm\fP definiuje
uprawnienia dostępu do kolejki komunikatów. Istnieją następujące bity
uprawnień:
.TS
l l.
0400	Odczyt przez użytkownika
0200	Zapis przez użytkownika
0040	Odczyt przez grupę
0020	Zapis przez grupę
0004	Odczyt przez pozostałych
0002	Zapis przez pozostałych
.TE
.P
Bity 0100, 0010 i 0001 (bity praw do uruchamiania) nie są przez system
wykorzystywane.
.P
Poprawne wartości parametru \fIop\fP to:
.TP 
\fBIPC_STAT\fP
Kopiowanie informacji ze struktury kontrolnej kolejki komunikatów
skojarzonej z \fImsqid\fP do struktury wskazywanej przez \fIbuf\fP. Wywołujący
musi mieć prawo odczytu kolejki komunikatów.
.TP 
\fBIPC_SET\fP
Zapis wartości niektórych pól struktury \fBmsqid_ds\fP wskazywanej przez
parametr \fIbuf\fP do struktury kontrolnej kolejki komunikatów.  Pole
\fBmsg_ctime\fP zostanie automatycznie uaktualnione.
.IP
Zaktualizowane mogą również zostać następujące pola tej struktury:
\fImsg_qbytes\fP, \fImsg_perm.uid\fP, \fImsg_perm.gid\fP i (9 najmniej znaczących
bitów z)  \fImsg_perm.mode\fP.
.IP
Efektywny identyfikator użytkownika musi wskazywać na właściciela
(\fImsg_perm.uid\fP)  lub na twórcę (\fImsg_perm.uid\fP)  kolejki komunikatów albo
proces wywołujący musi być uprzywilejowany.  Odpowiednie uprawnienia (Linux:
przywilej \fBCAP_SYS_RESOURCE\fP)  są również wymagane, aby nadać polu
\fBmsg_qbytes\fP wartość większą niż parametr systemowy \fBMSGMNB\fP.
.TP 
\fBIPC_RMID\fP
Usuwa natychmiast kolejkę komunikatów. Wznawia wszystkie procesy oczekujące
na zapis lub odczyt z kolejki (wywołania, które się wykonywały zasygnalizują
błąd i ustawią zmienną \fBerrno\fP na \fBEIDRM\fP). Proces wywołujący tę funkcję
musi mieć odpowiednie uprawnienia albo jego efektywny identyfikator
użytkownika musi wskazywać na twórcę lub na właściciela kolejki
komunikatów. Trzeci argument do \fBmsgctl\fP() jest w tym wypadku ignorowany.
.TP 
\fBIPC_INFO\fP (specyficzne dla Linuksa)
Zwraca w strukturze, na którą wskazuje \fIbuf\fP, informacje o systemowych
ograniczeniach i parametrach kolejek komunikatów. Struktura jest typu
\fImsginfo\fP (dlatego wymagane jest rzutowanie) i jest zdefiniowana w
\fI<sys/msg.h>\fP, pod warunkiem, że zdefiniowano również makro
\fB_GNU_SOURCE\fP:
.IP
.in +4n
.EX
struct msginfo {
    int msgpool; /* Rozmiar w kibibajtach puli buforów
                    używanej do przechowywania danych
                    komunikatu; nieużywane przez jądro */
    int msgmap;  /* Maksymalna liczba wpisów w mapie komuni\-
                    katu; nieużywane przez jądro */
    int msgmax;  /* Maksymalna liczba bajtów, które można
                    zapisać w pojedynczej wiadomości */
    int msgmnb;  /* Maksymalna liczba bajtów, które można
                    zapisać do kolejki; używane do inicjowania
                    msg_qbytes podczas tworzenia kolejki
                    (msgget(2)) */
    int msgmni;  /* Maksymalna liczba kolejek komunikatów */
    int msgssz;  /* Rozmiar segmentu komunikatu;
                    nieużywane przez jądro */
    int msgtql;  /* Maksymalna liczba komunikatów we wszystkich
                    kolejkach w systemie; nieużywane przez jądro */
    unsigned short msgseg;
                 /* Maksymalna liczba segmentów;
                    nieużywane przez jądro */
};
.EE
.in
.IP
Ustawienia \fImsgmni\fP, \fImsgmax\fP oraz \fImsgmnb\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 
\fBMSG_INFO\fP (specyficzne dla Linuksa)
Zwraca strukturę \fImsginfo\fP zawierającą te same informacje co w przypadku
\fBIPC_INFO\fP, z tym  wyjątkiem, że w następujących polach zwracane są
informacje o zasobach systemowych wykorzystywanych przez kolejki
komunikatów: pole \fImsgpool\fP zwraca liczbę kolejek komunikatów istniejących
obecnie w systemie; pole \fImsgmap\fP zwraca całkowitą liczbę komunikatów we
wszystkich kolejkach w systemie, a pole \fImsgtql\fP zwraca całkowitą liczbę
bajtów we wszystkich komunikatach z wszystkich kolejek w systemie.
.TP 
\fBMSG_STAT\fP (specyficzne dla Linuksa)
Zwraca strukturę \fImsqid_ds\fP, taką jak dla \fBIPC_STAT\fP. Jednakże parametr
\fImsqid\fP nie jest identyfikatorem kolejki, ale indeksem wewnętrznej tablicy
jądra przechowującej informacje o wszystkich kolejkach w systemie.
.TP 
\fBMSG_STAT_ANY\fP (specyficzne dla Linuksa, od Linuks 4.17)
Zwraca strukturę \fImsqid_ds\fP, jak dla \fBMSG_STAT\fP. Jednak \fImsg_perm.mode\fP
nie jest sprawdzany pod kątem uprawnień odczytu do \fImsqid\fP co oznacza, że
każdy użytkownik może wykonać tę operację (podobnie jak każdy użytkownik
może odczytać \fI/proc/sysvipc/msg\fP, pozyskując te same informacje).
.SH "WARTOŚĆ ZWRACANA"
W razie powodzenia \fBIPC_STAT\fP, \fBIPC_SET\fP i \fBIPC_RMID\fP zwracają
0. Pomyślnie zakończone operacje \fBIPC_INFO\fP i \fBMSG_INFO\fP zwracają indeks
najwyższego używanego wpisu w wewnętrznej tablicy jądra przechowującej
informacje o wszystkich kolejkach komunikatów. (Informacji tej można użyć w
operacjach \fBMSG_STAT\fP lub \fBMSG_STAT_ANY\fP, aby otrzymać informacje o
wszystkich kolejkach w systemie). Pomyślnie zakończona operacja \fBMSG_STAT\fP
lub \fBMSG_STAT_ANY\fP zwraca identyfikator kolejki o indeksie przekazanym w
\fImsqid\fP.
.P
W razie niepowodzenia zwracane jest \-1 i ustawiane jest \fIerrno\fP wskazując
rodzaj błędu.
.SH BŁĘDY
.TP 
\fBEACCES\fP
Parametr \fIop\fP jest równy \fBIPC_STAT\fP lub \fBMSG_STAT\fP, ale proces wywołujący
funkcję nie ma prawa do odczytu kolejki komunikatów wskazywanej przez
\fImsqid\fP ani nie ma przywileju \fBCAP_IPC_OWNER\fP (ang. capability) w
przestrzeni nazw użytkownika, która zarządza jego przestrzenią nazw IPC.
.TP 
\fBEFAULT\fP
Argument \fIop\fP ma wartość \fBIPC_SET\fP lub \fBIPC_STAT\fP, ale \fIbuf\fP wskazuje na
niedostępny obszar pamięci.
.TP 
\fBEIDRM\fP
Kolejka komunikatów została usunięta.
.TP 
\fBEINVAL\fP
Niepoprawna wartość parametru \fIop\fP lub \fImsqid\fP. Albo: w przypadku operacji
\fBMSG_STAT\fP wartość indeksu podana w parametrze \fImsqid\fP odwoływała się do
obecnie nieużywanego elementu tablicy.
.TP 
\fBEPERM\fP
Argument \fIop\fP jest równy \fBIPC_SET\fP lub \fBIPC_RMID\fP, ale proces wywołujący
funkcję nie jest twórcą (określonym w \fImsg_perm.cuid\fP) ani właścicielem
(określonym w \fImsg_perm.uid\fP) kolejki komunikatów, a wywołujący nie jest
uprzywilejowany (Linux: nie ma przywileju \fBCAP_SYS_ADMIN\fP).
.TP 
\fBEPERM\fP
Podjęto próbę (\fBIPC_SET\fP) zwiększenia \fImsg_qbytes\fP ponad parametr
systemowy \fBMSGMNB\fP, lecz wywołujący nie jest uprzywilejowany (Linux: nie ma
przywileju \fBCAP_SYS_RESOURCE\fP).
.SH STANDARDY
POSIX.1\-2008.
.SH HISTORIA
.\" SVID does not document the EIDRM error condition.
POSIX.1\-2001, SVr4.
.P
Niektóre pola struktury \fIstruct msqid_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 \fIop\fP).
.SH UWAGI
Operacje \fBIPC_INFO\fP, \fBMSG_STAT\fP oraz \fBMSG_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.
.SH "ZOBACZ TAKŻE"
\fBmsgget\fP(2), \fBmsgrcv\fP(2), \fBmsgsnd\fP(2), \fBcapabilities\fP(7),
\fBmq_overview\fP(7), \fBsysvipc\fP(7)
.PP
.SH TŁUMACZENIE
Autorami polskiego tłumaczenia niniejszej strony podręcznika są:
Rafał Lewczuk <R.Lewczuk@elka.pw.edu.p>,
Andrzej Krzysztofowicz <ankry@green.mf.pg.gda.pl>,
Robert Luberda <robert@debian.org>
i
Michał Kułach <michal.kulach@gmail.com>
.
.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 .
