next up previous contents
Next: Struktura msg w jądrze Up: Struktury danych: Wewnętrzne i Previous: Struktury danych: Wewnętrzne i   Contents

Bufor wiadomości

Pierwszą strukturą, której się przyjrzymy jest msgbuf. Ta struktura może być postrzegana jako szablon dla wiadomości. Sprawą programisty jest zdefiniowanie struktury tego typu, jest ważne abyś zrozumiał, iż istnieje struktura typu msgbuf. Jest ona zadeklorowana w linux/msg.h następująco:


   /* buffor wiadomości dla wywołań msgsnd i msgrcv */
   struct msgbuf {
       long mtype;         /* typ wiadomości */
       char mtext[1];      /* tekst wiadomości */
   };
   

Struktura msgbuf ma dwóch członków:

mtype

Typ wiadomości reprezentowany jako liczba dodatnia. To musi być liczba dodatnia!

mtext

Wiadomość.

Możliwość nadawania określonej wiadomości typu dostarcza ci narzędzia do tworzenia różnorodnych wiadomości w jednej kolejce. Dla przykładu: procesy typu klient mogą rozpoznawać specjalny numer oznaczający wiadomość od serwera, a serwer będzie obsługiwał inny numer oznaczający, że jest to wiadomość od klienta. Inny scenariusz: aplikacja może znakować wiadomości o błędach jedynką, żądania dwójką, masz nieograniczone możliwości.

Nie daj się zwieść przez nazwę drugiego elementu - mtext. Pole to nie jest zmuszone do przechowywania tablicy znaków, możesz przesyłać cokolwiek. Samo to pole może zniknąć z wiadomości, gdyż cała struktura może zostać przedefiniowana przez programistę. Rozważ taką możliwość:


   struct moj_msgbuf {
           long    mtype;          /* Typ wiadomości */
           long    id_zadania;     /* Identyfikator żądania */
           struct  klient_info;    /* Stuktura informacji dla klienta */
   };
   

Powyżej widzimy strukturę wiadomości, jednakże jest ona nieco zmieniona - jeden z jej elemntów został usunięty, a na jego miejse pojawiły się dwa nowe, z których jeden jest strukturą! Oto jest piękno kolejek wiadomości! Jądro w żaden sposób nie przetwarza przesyłanych danych. Możesz przesyłać każdą informację.

Niestety istnieje pewien wewnętrzny limit - maksymalny rozmiar wiadomości zdefiniowany jest w linux/msg.h następująco:


   #define MSGMAX  4056   /* <= 4056 */   /* maxymalny rozmiar wiadomości ( bajty ) */
   

Całkowita wiadomość nie może być większa niż 4056 bajtów, włączając w to mtype, który ma 4 bajty długości (long).


next up previous contents
Next: Struktura msg w jądrze Up: Struktury danych: Wewnętrzne i Previous: Struktury danych: Wewnętrzne i   Contents

2000-03-01


Poltronic