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 _______________________________________________ http://elf.cs.pub.ro/so/wiki/resurse/lista-discutii
