________________________________ From: Stanciu Alexandru <[email protected]> To: "[email protected]" <[email protected]> Sent: Tuesday, April 3, 2012 12:09 PM Subject: Re: [so] Coada non-blocanta ________________________________ From: Razvan Crainea <[email protected]> To: Stanciu Alexandru <[email protected]>; Sisteme de Operare <[email protected]> Sent: Tuesday, April 3, 2012 11:55 AM Subject: Re: [so] Coada non-blocanta 2012/4/3 Stanciu Alexandru <[email protected]>: > > Deci daca fac combinatiile: > 1. attr.mq_msgsize = sizeof(message_t) + 1 cu rc = mq_receive(q, (char > *)buf, sizeof(message_t), NULL); imi executa tot ce se afla sub > receive(coada este neblocanta) dar cand trimit ceva pe coada de la client nu > receptioneaza(se blocheaza) > 2. attr.mq_msgsize = sizeof(message_t) cu rc = mq_receive(q, (char *)buf, > sizeof(message_t) + 1, NULL); coada este blocanta; pana cand nu trimit ceva > pe coada, nu se executa nimic dupa receive > 3. attr.mq_msgsize = sizeof(message_t) cu rc = mq_receive(q, (char *)buf, > sizeof(message_t), NULL); ca la 2 > > Declar coada ca fiind neblocanta; poate sa-mi zica si mie cineva unde > gresesc?(sterg toate cozile create) > Salut, Alexandru! Clientul încearcă și el să creeze coada blocant, dacă aceasta nu există. Înainte de receive, apelează un mq_getattr și verifică dacă flag-ul O_NONBLOCK este în continuare setat. -- Răzvan Crainea Am asa: struct mq_attr attr; attr.mq_flags = O_NONBLOCK; attr.mq_maxmsg = 10; attr.mq_msgsize = sizeof(message_t); attr.mq_curmsgs = 0; cout << "b: " << attr.mq_flags << endl; q = mq_open("/gateway", O_CREAT | O_RDWR, 0644, &attr); struct mq_attr gttr;// = (mq_attr*) calloc (1, sizeof(mq_attr)); mq_getattr(q, >tr); cout << "e: " << gttr.mq_flags << endl; si in urma afisarii obtin(chiar si alocat dinamic): b: 2048 e: 0 Nici macar nu deschid clientul, doar programul meu. Am pus si flagul O_NONBLOCK in mq_open. Credeam ca daca pun in acea structura nu o sa mai trebuiasca sa pun si acest flag. Si merge si doar cu sizeof(message_t); acum sa vad pe la teste, poate trebuie 8192:).
_______________________________________________ http://elf.cs.pub.ro/so/wiki/resurse/lista-discutii
