.\" Copyright 1993 Giorgio Ciucci .\" .\" 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 .\" Modified Mon Jul 10 21:09:59 2000 by aeb .\" Modified 1 Jun 2002, Michael Kerrisk .\" 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 , 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 .br .B #include .br .B #include .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/.