#include <sys/stream.h>int putnextctl1(queue_t *q, int type, int p);
Architecture independent level 1 (DDI/DKI).
putnextctl1(), like putctl1(9F), tests the type argument to make sure a data type has not been specified, and attempts to allocate a message block. The p parameter can be used, for example, to specify how long the delay will be when an M_DELAY message is being sent. putnextctl1() fails if type is M_DATA, M_PROTO, or M_PCPROTO, or if a message block cannot be allocated. If successful, putnextctl1() calls the put(9E) routine of the queue pointed to by q with the newly allocated and initialized message.
A call to putnextctl1(q,type, p) is an atomic equivalent of putctl1(q->q_next, type, p). The STREAMS framework provides whatever mutual exclusion is necessary to insure that dereferencing q through its q_next field and then invoking putctl1(9F) proceeds without interference from other threads.
putnextctl1() should always be used in preference to putctl1(9F)
On success, 1 is returned. 0 is returned if type is a data type, or if a message block cannot be allocated.
putnextctl1() can be called from user or interrupt context.
See the putnextctl(9F) function page for an example of putnextctl1().