2012/4/3 Stanciu Alexandru <[email protected]>: > ________________________________ > From: Daniel Baluta <[email protected]> > To: Stanciu Alexandru <[email protected]>; Sisteme de Operare > <[email protected]> > Sent: Tuesday, April 3, 2012 6:07 AM > Subject: Re: [so] Coada non-blocanta > > 2012/4/3 Stanciu Alexandru <[email protected]>: >> Vreau sa fac si eu o coada non-blocanta, astfel incat, cand fac un receive >> sa nu se blocheze executia ci sa sara mai departe pana cand primeste ceva. >> Am facut asa: >> >> message_t *buf = (message_t*) calloc (1, sizeof(message_t)); >> >> mqd_t q; >> >> struct mq_attr attr; >> attr.mq_flags = O_NONBLOCK; >> attr.mq_maxmsg = 10; >> attr.mq_msgsize = sizeof(message_t); >> attr.mq_curmsgs = 0; >> >> q = mq_open("/gateway", O_CREAT | O_RDWR, 0644, &attr); >> >> while(1) >> { >> rc = mq_receive(q, (char *)buf, sizeof(message_t), NULL); > > Ce se întâmplă dacă al treilea argument este sizeof(message_t) + 1? > >> >> In while, daca rc != -1 afisez datele din mesaj altfel un mesaj oarecare. >> Problema este ca coada se blocheaza. Poate sa-mi zici si mie cineva de ce >> coada mea este blocanta totusi? Afisam mesaj imediat dupa receive si nu >> ajungea acolo. > > Poți folosi strace să vezi apelurile de sistem făcute. > > strace ./program > > thanks, > Daniel > > > In apelul mq_open am pus attr si NU &attr si a mers.
Imposibil! :) _______________________________________________ http://elf.cs.pub.ro/so/wiki/resurse/lista-discutii
