| msgctl(2) | System Calls Manual | msgctl(2) |
msgctl - steruje kolejkami komunikatów Systemu V
Standardowa biblioteka C (libc, -lc)
#include <sys/msg.h>
int msgctl(int msqid, int op, struct msqid_ds *buf);
msgctl() wykonuje operację określoną przez parametr op na kolejce komunikatów Systemu V o identyfikatorze msqid.
Struktura danych msqid_ds jest zdefiniowana w <sys/msg.h> następująco:
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) */
};
Pola struktury msqid_ds są następujące:
Struktura ipc_perm jest zdefiniowana następująco (wyróżnione pola można ustawić za pomocą IPC_SET):
struct ipc_perm {
key_t __key; /* Klucz podany w msgget(2) */
uid_t uid; /* Efektywny UID właściciela */
gid_t gid; /* Efektywny GID właściciela */
uid_t cuid; /* Efektywny UID twórcy */
gid_t cgid; /* Efektywny GID twórcy */
unsigned short mode; /* Uprawnienia */
unsigned short __seq; /* Numer sekwencji */
};
Najmniej znaczące 9 bitów pola mode struktury ipc_perm definiuje uprawnienia dostępu do kolejki komunikatów. Istnieją następujące bity uprawnień:
| 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 |
Bity 0100, 0010 i 0001 (bity praw do uruchamiania) nie są przez system wykorzystywane.
Poprawne wartości parametru op to:
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 */
};
W razie powodzenia IPC_STAT, IPC_SET i IPC_RMID zwracają 0. Pomyślnie zakończone operacje IPC_INFO i MSG_INFO 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 MSG_STAT lub MSG_STAT_ANY, aby otrzymać informacje o wszystkich kolejkach w systemie). Pomyślnie zakończona operacja MSG_STAT lub MSG_STAT_ANY zwraca identyfikator kolejki o indeksie przekazanym w msqid.
W razie niepowodzenia zwracane jest -1 i ustawiane jest errno wskazując rodzaj błędu.
POSIX.1-2008.
POSIX.1-2001, SVr4.
Niektóre pola struktury struct msqid_ds były w Linuksie 2.2 typu short, ale stały się typu long 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 IPC_64 w op).
Operacje IPC_INFO, MSG_STAT oraz MSG_INFO są używane przez program ipcs(1) w celu dostarczenia informacji o zajmowanych zasobach. W przyszłości operacje te mogą zostać zmodyfikowane lub przeniesione do interfejsu systemu plików /proc.
msgget(2), msgrcv(2), msgsnd(2), capabilities(7), mq_overview(7), sysvipc(7)
Tłumaczenie niniejszej strony podręcznika: 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>
Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać zapoznając się z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.
Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej manpages-pl-list@lists.sourceforge.net.
| 2 maja 2024 r. | Linux man-pages 6.9.1 |