| msgctl(2) | System Calls Manual | msgctl(2) |
msgctl - sterowanie kolejkami komunikatów Systemu V
Standardowa biblioteka C (libc, -lc)
#include <sys/msg.h>
int msgctl(int msqid, int cmd, struct msqid_ds *buf);
msgctl() wykonuje operację określoną przez parametr cmd 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; /* Ownership and permissions */
time_t msg_stime; /* Time of last msgsnd(2) */
time_t msg_rtime; /* Time of last msgrcv(2) */
time_t msg_ctime; /* Time of creation or last
modification by msgctl() */
unsigned long msg_cbytes; /* # of bytes in queue */
msgqnum_t msg_qnum; /* # number of messages in queue */
msglen_t msg_qbytes; /* Maximum # of bytes in queue */
pid_t msg_lspid; /* PID of last msgsnd(2) */
pid_t msg_lrpid; /* PID of last msgrcv(2) */
};
The fields of the msqid_ds structure are as follows:
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 */
};
The least significant 9 bits of the mode field of the ipc_perm structure define the access permissions for the message queue. The permission bits are as follows:
| 0400 | Read by user |
| 0200 | Write by user |
| 0040 | Read by group |
| 0020 | Write by group |
| 0004 | Read by others |
| 0002 | Write by others |
Bits 0100, 0010, and 0001 (the execute bits) are unused by the system.
Poprawne wartości parametru cmd 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 of entries in message
map; 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.
On failure, -1 is returned and errno is set to indicate the error.
POSIX.1-2001, POSIX.1-2008, SVr4.
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.
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 cmd).
msgget(2), msgrcv(2), msgsnd(2), capabilities(7), mq_overview(7), sysvipc(7)
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>
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.
| 15 grudnia 2022 r. | Linux man-pages 6.03 |