- test for room in next module's message queue
#include <sys/stream.h> int canputnext(queue_t *q);
int bcanputnext(queue_t *q, unsigned char pri);
Architecture independent level 1 (DDI/DKI).
Pointer to a message queue belonging to the invoking module.
Minimum priority level.
The invocation canputnext(q); is an atomic equivalent of the canput(q->q_next); routine. That is, the STREAMS framework provides whatever mutual exclusion is necessary to insure that dereferencing q through its q_next field and then invoking canput(9F) proceeds without interference from other threads.
bcanputnext(q, pri); is the equivalent of the bcanput(q->q_next, pri); routine.
canputnext(q); and bcanputnext(q, pri); should always be used in preference to canput(q->q_next); and bcanput(q->q_next, pri); respectively.
If the message queue is not full.
If the queue is full.
The canputnext() and bcanputnext() functions can be called from user, interrupt, or kernel context.
Drivers are responsible for both testing a queue with canputnext() or bcanputnext() and refraining from placing a message on the queue if the queue is full.