Każdy z trzech typów obiektów IPC posiada wewnętrzną strukturę danych utrzymywaną przez jądro. Dla kolejek wiadomości jest to struktura msqid_ds. Jądro tworzy, przechowuje i utrzymuje kopię tej struktury dla każdej kolejki wiadomości utworzonej w systemie. Jest ona zdefiniowana w linux/msg.h:
/* one msqid structure for each queue on the system */
struct msqid_ds {
struct ipc_perm msg_perm;
struct msg *msg_first; /* pierwsza wiadomość w kolejce */
struct msg *msg_last; /* ostatnia wiadomość w kolejce */
time_t msg_stime; /* czas ostatniego msgsnd */
time_t msg_rtime; /* czas ostatniego msgrcv */
time_t msg_ctime; /* czas ostatniej zmiany */
struct wait_queue *wwait;
struct wait_queue *rwait;
ushort msg_cbytes;
ushort msg_qnum;
ushort msg_qbytes; /* maxymalna ilość bajtów w kolejce */
ushort msg_lspid; /* pid ostatniego msgsnd */
ushort msg_lrpid; /* ostatnio odebrany pid */
};
Jakkolwiek niezbyt często będziesz się spotykał z członkami tej struktury zakończymy małym opisem każdego z nich:
Struktura ipc_perm, która jest zdefiniowana w linux/ipc.h. Zawiera ona informację na temat praw kolejki, włączając prawa dostępu oraz informacje o twórcy kolejki ( uid, etc ).
Wskaźnik do pierwszej wiadomości w kolejce ( początku listy ).
Wskaźnik do ostatniej wiadomości ( końca listy ).
Czas (time_t) kiedy wysłano ostatnią wiadomość.
Czas ostatniego odebrania wiadomości z kolejki.
Czas ostatniej 'zmiany' dokonanej na kolejce ( więcej dowiesz się póżniej ).
i
Wskaźniki do kolejki oczekiwania (wait queue) jądra. Używane są gdy operacja na kolejce uważa, że proces śpi ( np. kolejka jest pełna i proces czeka na otwarcie ).
Suma rozmiarów wszystkich wiadomości w kolejce.
Liczba wiadomości w kolejce.
Maxymalna liczba bajtów dla kolejki.
PID procesu, który jako ostatni wysłał wiadomość.
PID procesu, który jako ostatni odebrał wiadomość.