Provided by: manpages-pl-dev_20060617-3_all bug

NAZWA

       msgop - przekazywanie komunikatow

SK/LADNIA

       #include <sys/types.h>
       #include <sys/ipc.h>
       #include <sys/msg.h>

       int msgsnd(int msqid, struct msgbuf *msgp, size_t msgsz, int msgflg);

       ssize_t  msgrcv(int  msqid,  struct  msgbuf  *msgp,  size_t msgsz, long
       msgtyp, int msgflg);

OPIS

       W celu wyslania lub odebrania  komunikatu,  proces  powinien  zaalokowa
       struktur danych o nastpujcej postaci ogolnej:

            struct msgbuf {
                 long mtype;     /* rodzaj komunikatu, musi by > 0 */
                 char mtext[1];  /* przekazywane dane */
            };

       Pole  mtext jest tablic (lub inna struktur) o rozmiarze okrelonym przez
       msgsz, bdcym nieujemn liczb calkowit.  Dozwolone s komunikaty o zerowej
       dlugoci (tzn. nie zawierajce pola mtext) Warto pola mtype musi by liczb
       cile dodatni, ktora  moe  sluy  procesowi  odbierajcemu  komunikaty  do
       filtrowania kolejki.  (zobacz cz dotyczc msgrcv).

       Proces  wywolujcy  funkcj  musi  mie prawo zapisu do kolejki, aby wysla
       komunikat, natomiast prawo odczytu jest niezbdne, aby komunikat odebra.

       Wywolanie systemowe msgsnd dolcza kopi  komunikatu  wskazywanego  przez
       msgp do kolejki o identyfikatorze okrelonym przez msqid.

       Gdy  w  kolejce  jest  do miejsca, msgsnd koczy si pomylnie natychmiast
       (Pojemno kolejki  okrelona  jest  w  polu  msg_bytes  struktury  danych
       stowarzyszonej  z  kolejk.  Podczas  tworzenia kolejki nadawana jest mu
       warto inicjalna wynoszca MSGMNB bajtow, lecz ograniczenie to moe  zosta
       zmienione  za  pomoc  msgctl.)   Gdy  w  kolejce  nie ma do miejsca, to
       domylne zachowanie msgsnd polega na wstrzymaniu wykonywania funkcji  do
       czasu, gdy miejsce stanie si dostpne.  If Ustawienie w msgflg znacznika
       IPC_NOWAIT spowoduje, e zamiast tego  wywolanie  systemowe  zakoczy  si
       niepomylnie, zglaszajc bld EAGAIN.

       Wstrzymane  wywolanie  msgsnd  moe  rownie  zakoczy si niepomylnie, gdy
       kolejka zostanie usunita (i wtedy  wywolanie  to  powoduje  przypisanie
       zmiennej  errno wartoci EIDRM), lub gdy zostanie przechwycony sygnal (i
       wtedy wywolanie to powoduje przypisanie zmiennej errno wartoci  EINTR).
       (msgsnd  i  msgrcv  po  przerwaniu  przez  obslug  sygnalu  nie s nigdy
       automatycznie  restartowane,  nie  zalenie  od   ustawienia   znacznika
       SA_RESTART podczas ustanaiwiania funkcji obslugi sygnalu.)

       W wyniku pomylnego wykonania operacji, struktura danych opisujca kolejk
       komunikatow zostanie zmodyfikowana nastpujco:

              msg_lspid przypisany zostanie identyfikator procesu  wykonujcego
              t operacj.

              msg_qnum zostanie zwikszone o 1

              msg_stime zostanie przypisany aktualny czas.

       Wywolanie  systemowe msgrcv odczyta komunikat z kolejki wskazanej przez
       parametr msqid do struktury  msgbuf  wskazywanej  przez  parametr  msgp
       usuwajc odczytany komunikat z kolejki.

       Parametr  msgsz  okrela  maksymalny  rozmiar  (w  bajtach)  pola  mtext
       struktury wskazywanej przez parametr msgp.  Jeli dane komunikatu zajmuj
       wicej bajtow, ni msgsz, a parametr msgflg zawiera znacznik MSG_NOERROR,
       wowczas dane komunikatu zostan obcite (obcita  cz  zostanie  utracona).
       Jeli znacznik nie jest ustawiony a (a komunikat jest za dlugi), wowczas
       nie zostanie on usunity  z  kolejki,  natomiast  system  zglosi  bld  a
       zmiennej errno zostanie przypisana warto E2BIG.

       Parametr msgtyp okrela rodzaj komunikatu w nastpujcy sposob:

              Jeli  msgtyp  jest  rowny  0,  to  czytany jest pierwszy dostpny
              komunikat w kolejce (czyli najdawniej wyslany).

              Jeli msgtyp ma warto wiksz ni 0, to z kolejki  odczytywany  jest
              pierwszy  komunikat  tego  typu,  chyba  e  w  parametrze msgflg
              zostanie ustawiony  znacznik  MSG_EXCEPT,  kiedy  to  z  kolejki
              zostanie  odczytany pierwszy komunikat o typie innym ni podany w
              msgtyp.

              Jeli msgtyp ma  warto  mniejsz  ni  0,  to  z  kolejki  zostanie
              odczytany  pierwszy  komunikat  o  najniszym numerze typu, o ile
              jest on mniejszy lub rowny wartoci bezwzgldnej msgtyp .

       Parametr msgflg zawiera bitow alternatyw (OR) adnego, jednego lub wicej
       sporod nastpujcych znacznikow:

              IPC_NOWAIT  Wywolanie nie bdzie wstrzymywa pracy procesu, jeli w
              kolejce  nie  ma  komunikatow  odpowiedniego   typu.   Wywolanie
              systemowe  zglosi  wowczas  bld, przypisujc zmiennej errno warto
              ENOMSG.

              MSG_EXCEPT Uywane jest wtedy, gdy msgtyp ma warto  wiksz  ni  0,
              spowoduje  odczytanie  z  kolejki  pierwszego  komunikatu innego
              typu, ni msgtyp.

              MSG_NOERROR Spowoduje  obcicie  komunikatu,  jeli  jego  dane  s
              dlusze ni msgsz bajtow.

       Jeli  w  kolejce nie ma komunikatu spelniajcego te warunki, za znacznik
       IPC_NOWAIT  nie  zostal  przekazany  w  msgflg,  to   proces   zostanie
       wstrzymany, dopoki nie nastpi jedno z poniszych zdarze:

              Komunikat odpowiedniego typu zostanie umieszczony w kolejce.

              Kolejka  zostanie  usunita  z systemu. W tym przypadku wywolanie
              systemowe zglosi bld, przypisujc zmiennej errno warto EIDRM.

              Proces wywolujcy otrzyma sygnal wymagajcy przechwycenia.  W  tym
              przypadku  wywolanie  systemowe  zglosi bld, przypisujc zmiennej
              errno warto EINTR.

       Jeli operacja zakoczy si pomylnie, to struktura danych opisujca  kolejk
       zostanie nastpujco zmodyfikowana:

              msg_lrpid przyjmie warto rown identyfikatorowi wolajcego procesu

              msg_qnum zostanie zmniejszone o 1.

              msg_rtime zostanie przypisany aktualny czas.

WARTO ZWRACANA

       W  przypadku  niepowodzenia,  obydwa  wywolania  zwroc  -1  i  przypisz
       zmiennej errno warto okrelajc rodzaj  bldu.   W  przeciwnym  przypadku,
       msgsnd  zwroci  0, za msgrvc zwroci liczb bajtow skopiowanych z kolejki
       do tablicy mtext.

B/LDY

       Jeli wywolanie msgsnd nie powiedzie si, to zmienna errno przyjmie  jedn
       z poniszych wartoci:

       EAGAIN     Komunikat  nie  moe  zosta  wyslany  do  kolejki,  z  powodu
                  ograniczenia  msg_qbytes,  a  znacznik   IPC_NOWAIT   zostal
                  przekazany w parametrze mgsflg.

       EACCES     Proces nie ma prawa zapisu do kolejki komunikatow.

       EFAULT     dres wskazywany przez msgp jest niedostpny.

       EIDRM      Kolejka zostala w midzyczasie usunita.

       EINTR      Podczas  oczekiwania na zwolnienie miejsca w kolejce, proces
                  przechwycil sygnal.

       EINVAL     Niewlaciwa warto msqid,  mtype  (powinna  by  dodatnia)  lub
                  msgsz  (powinna  by  wiksza lub rowna 0 i mniejsza lub rowna
                  MSGMAX).

       ENOMEM     Brak w systemie pamici na skopiowanie podanego msgbuf.

       Jeli wywolanie msgrcv nie powiedzie  si,  to  zmiennej  errno  zostanie
       przypisana jedna z poniszych wartoci:

       E2BIG      Tekst   komunikatu  jest  dluszy  ni  msgsz  ,  za  znacznik
                  MSG_NOERROR nie zostal w parametrze msgflg ustawiony.

       EACCES     Proces nie ma prawa do odczytu danej kolejki komunikatow.

       EFAULT     Adres wskazywany przez msgp jest niedostpny.

       EIDRM      Proces oczekiwal na komunikat,  ale  w  midzyczasie  kolejka
                  zostala usunita.

       EINTR      Proces  oczekiwal  na  komunikat,  ale  dotarl do niego jaki
                  wymagajcy obsluenia sygnal.

       EINVAL     Niewlaciwa warto msgqid lub msgsz  (powinna  by  wiksza  lub
                  rowna 0).

       ENOMSG     Znacznik  IPC_NOWAIT  zostal  przekazany  w  msgflg  , ale w
                  kolejce nie ma komunikatu danego typu.

UWAGI

       Wywolanie msgsnd obowizuj nastpujce ograniczenia systemowe:

       MSGMAX     Maksymalny  rozmiar  danych  komunikatu:  ta   implementacja
                  ogranicza wielko do 8192 bajty.

       MSGMNB     Domylny  maksymalny  lczny  rozmiar  (w  bajtach) wszystkich
                  komunikatow w kolejce: 16384 bajty.   Administrator  systemu
                  moe   przekroczy  to  ograniczenie,  przy  pomocy  wywolania
                  msgctl.

       W tej implementacji nie  ma  jawnego  systemowego  ograniczenia  liczby
       komunikatow  przechowywanych w kolejce (MSGTQL) i na rozmiar obszaru (w
       bajtach) przeznaczonego na komunikaty (MSGPOOL).

ZGODNE Z

       SVr4, SVID.

UWAGA

       Parametr bdcy wskanikiem jest w ibc4, libc5,  glibc  2.0  i  glibc  2.1
       zadeclarowany jako struct msgbuf *. W glibc 2.2 jest zadeklarowany jako
       void * (const void * dla msgsnd()), zgodnie z SUSv2.

ZOBACZ TAKE

       ipc(5), msgctl(2), msgget(2), msgrcv(2), msgsnd(2)

INFORMACJE O T/LUMACZENIU

       Powysze tlumaczenie pochodzi z nieistniejcego ju  Projektu  Tlumaczenia
       Manuali  i  moe nie by aktualne. W razie zauwaenia ronic midzy powyszym
       opisem a rzeczywistym zachowaniem  opisywanego  programu  lub  funkcji,
       prosimy o zapoznanie si z oryginaln (angielsk) wersj strony podrcznika.