[so] cozi de mesaje

Andrei Ismail iandrei at gmail.com
Sat Apr 4 14:49:14 EEST 2009


Buna, Delia!

> mqd_t m = mq_open("/coada", O_CREAT | O_RDWR, 0666, NULL);
> char buf[1024];
> usigned int prio = 10;
> int ret = mq_receive(m, buf, 1024, &prio);
> printf("ret = %d, errno = %d", ret, errno);

Cel mai probabil, problema este ca pasezi NULL pentru parametrul 4 al
functiei. Parametrul acela este o structura care contine "atributele
cozii de mesaje". Printre ele se regaseste si dimensiunea maxima a
unui mesaj din coada. Valoarea implicita pe care o primeste este 8192
pe sistemele la care am avut eu acces.

Cand dai mq_receive pentru o coada, unul din primele lucruri facute
este **verificarea marimii buffer-ului in care tu ii spui sa depuna
mesajul**. Si daca nu ii dai o dimensiune >= dimensiunea maxima a unui
mesaj din coada, functia se intoarce cu un cod de eroare (e destul de
logic, presupune ca nu are loc sa puna urmatorul mesaj in intregime).
De asemenea, in atributele sus-mentionate, se specifica printr-un flag
daca coada este blocanta sau nu. Sfatul meu ar fi sa setezi tu insuti
atributele, ajutandu-te de manpages :)

> Eu sunt studenta in anul 5 si fac tema pentru restanta. Cand am facut eu laboratorul  acesta prezenta api-ul vechi cu msgget(), etc. Se poate face o exceptie pentru noi cei de anul 5 sa le putem utiliza pe cele vechi ? Macar, cu acesta am lucrat.

Ma indoiesc ca se poate face aceasta exceptie. Daca nu reusesti sa pui
la punct un exemplu functional singura, te poti ajuta de rezolvarile
de la laboratorul de IPC, pe care ma ocup eu chiar acum sa le pun
online.

Multumesc,
--
Andrei Ismail
Automatic Control and Computers Faculty
Polytechnic University of Bucharest


More information about the so mailing list