Comunicare si sincronizare prin mesaje
Deoarece procesele care coopereaza au nevoie atat de comunicare cat si de sincronizare, este de dorit integrarea lor intr-un singur mecanism. Mesajele reprezinta un mecanism simplu pentru realizarea acestui deziderat. In esenta, un mesaj este o colectie de informatii ce pot fi schimbate intre procesul transmitator si cel receptor. Pentru utilizarea lor sunt disponibile cele doua functii : SEND si RECEIVE. Mesajele sunt puse intr-o coada de mesaje.
Creare coada de mesaje :
int msgget(key_t key, int msgflg);
key=cheia resursei (ce coada de mesaje sa utilizeze);
msgflg=IPC_CREAT, IPC_EXCL
Daca se specifica IPC_CREAT && IPC_EXCL, functia va returna eroare daca coada de mesaje exsita deja in sistem.
Trimitere si receptionare mesaj :
typedef struct msqid_ds msqid_ds;
typedef struct msgbuf msgbuf;
int msgsnd(int msqid,struct msgbuf *msgp, int msgsz, int msgflg);
int msgrcv(int msqid, struct msgbuf *msgp, int msgsz, int msgtyp, int msgflg);
msqid=identificatorul cozii de mesaje returnat de msgget
msgsz=dimensiunea lui msgp
msgflg=IPC_NOWAIT, MSG_EXCEPT, MSG_NOERROR
IPC_NOWAIT folosit la msgsnd - daca mesajul depaseste msg_qbytes, se returneaza eroare, mesajul nefiind transmis. Altfel, procesul este suspendat pana cand conditia de suspendare nu mai exista (caz in care mesajul va fi transmis) sau coada de mesaje este distrusa (caz in care se returneaza eroare) sau procesul primeste un semnal care trebuie tratat (caz in care se returneaza eroare).
IPC_NOWAIT folosit la msgrcv - procesul nu se blocheaza asteptand aparitia mesajului.
MSG_NOERROR folosit la msgrcv - daca lungimea textului mesajului este mai mare decat msgsz, el va fi truchiat; altfel, se returneaza eroare.
Daca msgtyp=0, va fi extras primul mesaj din coada;
>0, va fi extras primul mesaj din coada de tipul msgtyp daca msgflg!=MSG_EXCEPT; altfel, se va extrage primul mesaj cu tipul!=msgtyp;
<0, va fi extras primul mesaj cu cel mai mic tip valoarea absoluta a lui msgtyp.
int msgctl(int msqid, int cmd, struct msqid_ds *buf);
- se executa operatia de control specificata de cmd
cmd=IPC_STAT, copiaza structura de date a mesajului in buf (procesul trebuie sa aiba dreptul de citire a mesajului);
IPC_SET, copiaza informatia din buf in structura mesajului (procesul trebuie sa aiba uid-ul proprietarului, creatorului sau al superuser-ului);
IPC_RMID, sterge toate mesajele, inclusiv coada de mesaje.
Politica de confidentialitate |
.com | Copyright ©
2024 - Toate drepturile rezervate. Toate documentele au caracter informativ cu scop educational. |
Personaje din literatura |
Baltagul – caracterizarea personajelor |
Caracterizare Alexandru Lapusneanul |
Caracterizarea lui Gavilescu |
Caracterizarea personajelor negative din basmul |
Tehnica si mecanica |
Cuplaje - definitii. notatii. exemple. repere istorice. |
Actionare macara |
Reprezentarea si cotarea filetelor |
Geografie |
Turismul pe terra |
Vulcanii Și mediul |
Padurile pe terra si industrializarea lemnului |
Termeni si conditii |
Contact |
Creeaza si tu |