Jądro Linux (2.6) implementuje dwie kolejki komunikatów: (raczej „listy komunikatów”, ponieważ implementacja odbywa się za pomocą listy połączonej, która nie jest ściśle zgodna z zasadą FIFO)
Komunikaty IPC systemu V.
Kolejka komunikatów z systemu V.
Proces może wywołać, msgsnd()aby wysłać wiadomość. Musi przekazać identyfikator IPC kolejki komunikatów odbierających, rozmiar wiadomości i strukturę wiadomości, w tym typ wiadomości i tekst.
Z drugiej strony proces msgrcv()odbiera komunikat, przekazując identyfikator IPC kolejki komunikatów, gdzie wiadomość powinna zostać zapisana, rozmiar i wartość t .
t określa komunikat zwrócony z kolejki, wartość dodatnia oznacza, że zwracany jest pierwszy komunikat o typie równym t , wartość ujemna zwraca ostatni komunikat równy typowi t, a zero zwraca pierwszy komunikat w kolejce.
Istnieją ograniczenia dotyczące rozmiaru wiadomości (maks.), Całkowitej liczby wiadomości (mni) i całkowitego rozmiaru wszystkich wiadomości w kolejce (mnb):
Odpowiedzi:
Jądro Linux (2.6) implementuje dwie kolejki komunikatów:
(raczej „listy komunikatów”, ponieważ implementacja odbywa się za pomocą listy połączonej, która nie jest ściśle zgodna z zasadą FIFO)
Komunikaty IPC systemu V.
Kolejka komunikatów z systemu V.
Proces może wywołać,
msgsnd()
aby wysłać wiadomość. Musi przekazać identyfikator IPC kolejki komunikatów odbierających, rozmiar wiadomości i strukturę wiadomości, w tym typ wiadomości i tekst.Z drugiej strony proces
msgrcv()
odbiera komunikat, przekazując identyfikator IPC kolejki komunikatów, gdzie wiadomość powinna zostać zapisana, rozmiar i wartość t .t określa komunikat zwrócony z kolejki, wartość dodatnia oznacza, że zwracany jest pierwszy komunikat o typie równym t , wartość ujemna zwraca ostatni komunikat równy typowi t, a zero zwraca pierwszy komunikat w kolejce.
Funkcje te są zdefiniowane w include / linux / msg.h i zaimplementowane w ipc / msg.c
Istnieją ograniczenia dotyczące rozmiaru wiadomości (maks.), Całkowitej liczby wiadomości (mni) i całkowitego rozmiaru wszystkich wiadomości w kolejce (mnb):
Wyjście powyżej jest z systemu Ubuntu 10.10, wartości domyślne określone są w msg.h .
Więcej niewiarygodnie stary System V kolejka komunikatów rzeczy wyjaśnione tutaj .
Kolejka wiadomości POSIX
Standard POSIX definiuje mechanizm kolejki komunikatów oparty na kolejce komunikatów IPC Systemu V, rozszerzając ją o niektóre funkcje:
Zobacz ipc / mqueue.c
Przykład
util-linux
udostępnia niektóre programy do analizy i modyfikacji kolejek komunikatów, a specyfikacja POSIX podaje kilka przykładów C:Utwórz kolejkę wiadomości za pomocą
ipcmk
; generalnie zrobiłbyś to, wywołując funkcje C, takie jakftok()
imsgget()
:Pozwala zobaczyć, co się stało przy użyciu
ipcs
lub zcat /proc/sysvipc/msg
:Teraz zapełnij kolejkę kilkoma wiadomościami:
Ponownie, generalnie nie kodujesz msqid w kodzie.
A druga strona, która otrzyma wiadomości:
Zobacz co się dzieje:
Po dwóch otrzymaniach kolejka jest ponownie pusta.
Usuń go później, określając key (
-Q
) lub msqid (-q
):źródło