.\" Copyright 1993 Giorgio Ciucci <giorgio@crcc.it>
.\"
.\" Permission is granted to make and distribute verbatim copies of this
.\" manual provided the copyright notice and this permission notice are
.\" preserved on all copies.
.\"
.\" Permission is granted to copy and distribute modified versions of this
.\" manual under the conditions for verbatim copying, provided that the
.\" entire resulting derived work is distributed under the terms of a
.\" permission notice identical to this one
.\" 
.\" Since the Linux kernel and libraries are constantly changing, this
.\" manual page may be incorrect or out-of-date.  The author(s) assume no
.\" responsibility for errors or omissions, or for damages resulting from
.\" the use of the information contained herein.  The author(s) may not
.\" have taken the same level of care in the production of this manual,
.\" which is licensed free of charge, as they might when working
.\" professionally.
.\" 
.\" Formatted or processed versions of this manual, if unaccompanied by
.\" the source, must acknowledge the copyright and authors of this work.
.\"
.\" Modified Tue Oct 22 16:40:11 1996 by Eric S. Raymond <esr@thyrsus.com>
.\" Modified Mon Jul 10 21:09:59 2000 by aeb
.\" Modified 1 Jun 2002, Michael Kerrisk <mtk16@ext.canterbury.ac.nz>
.\"    Language clean-ups.
.\"    Enhanced and corrected information on msg_qbytes, MSGMNB and MSGMAX
.\"    Added note on restart behaviour of msgsnd and msgrcv
.\"    Formatting clean-ups (argument and field names marked as .I
.\"            instead of .B)
.\"
.\" Translated by Rafal Lewczuk, 14 May 1999
.\" Last update: A. Krzysztofowicz <ankry@mif.pg.gda.pl>, Jun 2002,
.\"              manpages 1.51
.\"
.TH MSGOP 2 2002-06-01 "Linux 2.4.18" "Podręcznik programisty Linuksa" 
.SH NAZWA
msgop \- przekazywanie komunikatów
.SH SKŁADNIA
.nf
.B
#include <sys/types.h>
.br
.B
#include <sys/ipc.h>
.br
.B
#include <sys/msg.h>
.fi
.sp
.BI "int msgsnd(int " msqid ,
.BI "struct msgbuf *" msgp ,
.BI "size_t " msgsz ,
.BI "int " msgflg );
.sp
.BI "ssize_t msgrcv(int " msqid ,
.BI "struct msgbuf *" msgp ,
.BI "size_t " msgsz ,
.BI "long " msgtyp ,
.BI "int " msgflg );
.SH OPIS
\fI Uwaga! To tłumaczenie może być nieaktualne!\fP
.PP
W celu wysłania lub odebrania komunikatu, proces powinien zaalokować
strukturę danych o następującej postaci ogólnej:
.sp
.B
	struct msgbuf {
.br
.B
		long	mtype;	
/* rodzaj komunikatu, musi być > 0 */
.br
.B
		char	mtext[1];	
/* przekazywane dane */
.br
.B
	};
.sp
Pole
.I mtext
jest tablicą (lub inna strukturą) o rozmiarze określonym przez
.IR msgsz ,
będącym nieujemną liczbą całkowitą.
Dozwolone są komunikaty o zerowej długości (tzn. nie zawierające pola
.IR mtext )
Wartość pola
.I mtype
musi być liczbą ściśle dodatnią, która może służyć procesowi odbierającemu
komunikaty do filtrowania kolejki.
(zobacz część dotyczącą
.BR msgrcv ).
.PP
Proces wywołujący funkcję musi mieć prawo zapisu do kolejki, aby wysłać
komunikat, natomiast prawo odczytu jest niezbędne, aby komunikat odebrać.
.PP
Wywołanie systemowe 
.B msgsnd
dołącza kopię komunikatu wskazywanego przez
.I msgp
do kolejki o identyfikatorze określonym przez
.IR msqid .
.PP
Gdy w kolejce jest dość miejsca,
.B msgsnd
kończy się pomyślnie natychmiast
(Pojemność kolejki określona jest w polu
.I msg_bytes
struktury danych stowarzyszonej z kolejką. Podczas tworzenia kolejki
nadawana jest mu wartość inicjalna wynosząca
.B MSGMNB
bajtów, lecz ograniczenie to może zostać zmienione za pomocą
.BR msgctl .)
Gdy w kolejce nie ma dość miejsca, to domyślne zachowanie
.B msgsnd
polega na wstrzymaniu wykonywania funkcji do czasu, gdy miejsce stanie się
dostępne.
If
Ustawienie w
.B msgflg
znacznika
.B IPC_NOWAIT
spowoduje, że zamiast tego wywołanie systemowe zakończy się niepomyślnie,
zgłaszając błąd
.BR EAGAIN .

Wstrzymane wywołanie
.B msgsnd
może również zakończyć się niepomyślnie, gdy kolejka zostanie usunięta
(i wtedy wywołanie to powoduje przypisanie zmiennej
.I errno
wartości 
.BR EIDRM ),
lub gdy zostanie przechwycony sygnał (i wtedy wywołanie to powoduje
przypisanie zmiennej
.I errno
wartości
.BR EINTR ).
.RB ( msgsnd " i " msgrcv
po przerwaniu przez obsługę sygnału nie są nigdy automatycznie restartowane,
nie zależnie od ustawienia znacznika
.B SA_RESTART
podczas ustanaiwiania funkcji obsługi sygnału.)
.PP
W wyniku pomyślnego wykonania operacji, struktura danych opisująca
kolejkę komunikatów zostanie zmodyfikowana następująco:
.IP
.I msg_lspid
przypisany zostanie identyfikator procesu wykonującego tę operację.
.IP
.I msg_qnum
zostanie zwiększone o 1
.IP
.I msg_stime
zostanie przypisany aktualny czas.
.PP
Wywołanie systemowe
.B msgrcv
odczyta komunikat z kolejki wskazanej przez parametr
.I msqid
do struktury
.I msgbuf
wskazywanej przez parametr
.I msgp
usuwając odczytany komunikat z kolejki.
.PP
Parametr
.I msgsz
określa maksymalny rozmiar (w bajtach) pola
.I mtext
struktury wskazywanej przez parametr
.IR msgp .
Jeśli dane komunikatu zajmują więcej bajtów, niż
.IR msgsz ,
a parametr
.I msgflg
zawiera znacznik
.BR MSG_NOERROR ,
wówczas dane komunikatu zostaną obcięte (obcięta część zostanie
utracona). Jeśli znacznik nie jest ustawiony a (a komunikat jest za długi),
wówczas nie zostanie on usunięty z kolejki, natomiast system zgłosi
błąd a zmiennej
.I errno
zostanie przypisana wartość
.BR E2BIG .
.PP
Parametr
.I msgtyp
określa rodzaj komunikatu w następujący sposób:
.IP
Jeśli
.I msgtyp
jest równy
.BR 0 ,
to czytany jest pierwszy dostępny komunikat w kolejce 
(czyli najdawniej wysłany).
.IP
Jeśli
.I msgtyp
ma wartość większą niż
.BR 0 ,
to z kolejki odczytywany jest pierwszy komunikat tego typu, chyba że
w parametrze
.I msgflg
zostanie ustawiony znacznik
.BR MSG_EXCEPT ,
kiedy to z kolejki zostanie odczytany pierwszy komunikat o typie innym niż
podany w
.IR msgtyp .
.IP
Jeśli
.I msgtyp
ma wartość mniejszą niż 
.BR 0 , 
to z kolejki zostanie odczytany pierwszy komunikat o najniższym numerze typu,
o ile jest on mniejszy lub równy wartości bezwzględnej
.I msgtyp .
.PP
Parametr 
.I msgflg
zawiera bitową alternatywę (OR) żadnego, jednego lub więcej spośród
następujących znaczników:
.IP
.B IPC_NOWAIT
Wywołanie nie będzie wstrzymywać pracy procesu, jeśli w kolejce nie ma
komunikatów odpowiedniego typu. Wywołanie systemowe zgłosi wówczas błąd,
przypisując zmiennej
.I errno
wartość
.BR ENOMSG.
.IP
.B MSG_EXCEPT
Używane jest wtedy, gdy
.I msgtyp
ma wartość większą niż
.BR 0 ,
spowoduje odczytanie z kolejki pierwszego komunikatu innego typu, niż
.IR msgtyp .
.IP
.B MSG_NOERROR
Spowoduje obcięcie komunikatu, jeśli jego dane są dłuższe niż
.I msgsz
bajtów.
.PP
Jeśli w kolejce nie ma komunikatu spełniającego te warunki, zaś znacznik 
.B IPC_NOWAIT
nie został przekazany w
.IR msgflg ,
to proces zostanie wstrzymany, dopóki nie nastąpi jedno z poniższych zdarzeń:
.IP
Komunikat odpowiedniego typu zostanie umieszczony w kolejce.
.IP
Kolejka zostanie usunięta z systemu. W tym przypadku wywołanie systemowe
zgłosi błąd, przypisując zmiennej
.I errno
wartość
.BR EIDRM .
.IP
Proces wywołujący otrzyma sygnał wymagający przechwycenia. W tym przypadku
wywołanie systemowe zgłosi błąd, przypisując zmiennej 
.I errno
wartość
.BR EINTR .
.PP
Jeśli operacja zakończy się pomyślnie, to struktura danych opisująca kolejkę
zostanie następująco zmodyfikowana:
.IP
.I msg_lrpid
przyjmie wartość równą identyfikatorowi wołającego procesu
.IP
.I msg_qnum
zostanie zmniejszone o 1.
.IP
.I msg_rtime
zostanie przypisany aktualny czas.
.SH "WARTOŚĆ ZWRACANA"
W przypadku niepowodzenia, obydwa wywołania zwrócą 
.B \-1
i przypiszą zmiennej
.I errno
wartość określającą rodzaj błędu.
W przeciwnym przypadku,
.B msgsnd
zwróci
.BR 0 ,
zaś
.B msgrvc
zwróci liczbę bajtów skopiowanych z kolejki do tablicy
.IR mtext .
.SH BŁĘDY
Jeśli wywołanie
.B msgsnd
nie powiedzie się, to zmienna
.I errno
przyjmie jedną z poniższych wartości:
.TP 11
.B EAGAIN
Komunikat nie może zostać wysłany do kolejki, z
powodu ograniczenia
.IR msg_qbytes ,
a znacznik
.B IPC_NOWAIT
został przekazany w parametrze
.IR mgsflg .
.TP
.B EACCES
Proces nie ma prawa zapisu do kolejki komunikatów.
.TP
.B EFAULT
dres wskazywany przez
.I msgp
jest niedostępny.
.TP
.B EIDRM
Kolejka została w międzyczasie usunięta.
.TP
.B EINTR
Podczas oczekiwania na zwolnienie miejsca w kolejce, proces przechwycił
sygnał.
.TP
.B EINVAL
Niewłaściwa wartość
.IR msqid ,
.I mtype
(powinna być dodatnia) lub
.I msgsz
(powinna być większa lub równa
.B 0
i mniejsza lub równa
.BR MSGMAX ).
.TP
.B ENOMEM
Brak w systemie pamięci na skopiowanie podanego
.IR msgbuf .
.PP
Jeśli wywołanie
.B msgrcv
nie powiedzie się, to zmiennej 
.I errno
zostanie przypisana jedna z poniższych wartości:
.TP 11
.B E2BIG
Tekst komunikatu jest dłuższy niż
.I msgsz ,
zaś znacznik
.B MSG_NOERROR
nie został w parametrze 
.I msgflg
ustawiony.
.TP
.B EACCES
Proces nie ma prawa do odczytu danej kolejki komunikatów.
.TP
.B EFAULT
Adres wskazywany przez
.I msgp
jest niedostępny.
.TP
.B EIDRM
Proces oczekiwał na komunikat, ale w międzyczasie kolejka została usunięta.
.TP
.B EINTR
Proces oczekiwał na komunikat, ale dotarł do niego jakiś
wymagający obsłużenia sygnał.
.TP
.B EINVAL
Niewłaściwa wartość
.I msgqid
lub
.I msgsz
(powinna być większa lub równa 
.BR 0 ).
.TP
.B ENOMSG
Znacznik
.B IPC_NOWAIT
został przekazany w
.I msgflg ,
ale w kolejce nie ma komunikatu żądanego typu.
.SH UWAGI
Wywołanie
.B msgsnd
obowiązują następujące ograniczenia systemowe:
.TP 11
.B MSGMAX
Maksymalny rozmiar danych komunikatu: ta implementacja ogranicza wielkość do
8192 bajty.
.TP
.B MSGMNB
Domyślny maksymalny łączny rozmiar (w bajtach) wszystkich komunikatów
w kolejce: 16384 bajty.
Administrator systemu może przekroczyć to ograniczenie, przy pomocy wywołania
.BR msgctl .
.PP
W tej implementacji nie ma jawnego systemowego ograniczenia liczby komunikatów
przechowywanych w kolejce
.RB ( MSGTQL )
i na rozmiar obszaru (w bajtach) przeznaczonego na komunikaty
.RB ( MSGPOOL ).
.SH "ZGODNE Z"
SVr4, SVID.
.SH UWAGA
Parametr będący wskaźnikiem jest w ibc4, libc5, glibc 2.0 i glibc 2.1
zadeclarowany jako \fIstruct msgbuf *\fP. W glibc 2.2 jest zadeklarowany jako
\fIvoid *\fP (\fIconst void *\fP dla \fImsgsnd()\fP), zgodnie z SUSv2.
.SH "ZOBACZ TAKŻE"
.BR ipc (5),
.BR msgctl (2),
.BR msgget (2),
.BR msgrcv (2),
.BR msgsnd (2)
.SH "INFORMACJE O TŁUMACZENIU"
Powyższe tłumaczenie pochodzi z nieistniejącego już Projektu Tłumaczenia Manuali i 
\fImoże nie być aktualne\fR. W razie zauważenia różnic między powyższym opisem
a rzeczywistym zachowaniem opisywanego programu lub funkcji, prosimy o zapoznanie 
się z oryginalną (angielską) wersją strony podręcznika za pomocą polecenia:
.IP
man \-\-locale=C 2 msgop
.PP
Prosimy o pomoc w aktualizacji stron man \- więcej informacji można znaleźć pod
adresem http://sourceforge.net/projects/manpages\-pl/.
