SHPORA.net :: PDA

Login:
регистрация

Main
FAQ

гуманитарные науки
естественные науки
математические науки
технические науки
Search:
Title: | Body:

d.Comunic.intr

^algoritmul msgrcv /* receptionare mesaj */
^intrгri: (1)descriptorul de mesaj
(2)adresa vectorului de date pentru mesajele care sosesc
(3)dimensiunea vectorului de date
(4)tipul de mesaj cerut
(5)indicatori (flag-uri)
^ie?iri: numarul de octeti din mesajul returnat
{
^verifica permisiunile;
^ciclu:
verifica validitatea descriptorului de mesaj;
/* gaseste mesajul care va fi returnat catre utilizator */
^if (tipul de mesaj cerut==0)
se considera primul mesaj din coada de mesaje;
^else
^if (tipul de mesaj cerut > 0)
se considera primul mesaj care are tipul cerut, din coada de mesaje;
^else /* valoarea tipului mesajului este negativa */
se considera primul mesaj dintre cele care au valoarea tipului cea mai mica din coada de mesaje, astfel incit aceasta valoare sa fie mai mica sau egala, in modul, cu valoarea tipului cerut;
^if (exista un mesaj)
{
corecteaza dimensiunea mesajului sau returneaza eroare daca
dimensiunea data de utilizator este prea mica;
copiaza tipul si textul mesajului din spatiul nucleu in spatiul user;
sterge mesajul din coada de mesaje;
^return;
}
/* nu exista nici un mesaj */
^if (flag-urile precizeaza ca procesul sa nu treaca in sleep)
^return (cu eroare);
^sleep(eveniment:sosirea unui mesaj in coada de mesaje);
^goto ciclu;
} .
Un proces poate inspecta starea unui descriptor de mesaj, оi poate stabili valoarea ?i poate ?terge un descriptor de mesaj cu ajutorul apelului sistem msgctl. Sintaxa apelului este:
_msgctl(id, cmd, mstatbuf)
unde:
-id identificг descriptorul de mesaj;
-cmd precizeazг tipul comenzii;
-mstatbuf reprezintг adresa structurii de date utilizator care va conюine parametrii de control sau rezultatele unei interogгri.