________________________________
 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, &gttr);
    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

Raspunde prin e-mail lui