Reading from message queue (non-blocking if empty)

OnTheFly picture OnTheFly · Dec 20, 2012 · Viewed 7.9k times · Source

I'm writing to message queue

if (msgsnd(q, &msg, sizeof(message), slaves_list[to]) == -1)

and reading

if (msgrcv(q, &msg, sizeof(message), id, 0) == -1)

but what if this queue is empty? How to check that? If there is nothing I want execute next instruction in the loop

Answer

NPE picture NPE · Dec 20, 2012

Use IPC_NOWAIT. From the documentation:

If (msgflg & IPC_NOWAIT) is non-zero, the calling thread will return immediately with a return value of -1 and errno set to [ENOMSG].