putctl(D3)

putctl - send a control message to a queue

As shipped in IRIX 6.5. First release of IRIX 6.5.

NAME
     putctl - send a control message to a queue

SYNOPSIS
     #include <sys/stream.h>
     #include <sys/ddi.h>
     int putctl(queue_t *q, int type);

   Arguments
     q         Pointer to the queue to which the message is to be sent.

     type      Message type (must be a control type).

DESCRIPTION
     putctl tests the type argument to make sure a data type has not been
     specified, and then attempts to allocate a message block.  putctl fails
     if type is M_DATA, M_PROTO, or M_PCPROTO, or if a message block cannot be
     allocated.  If successful, putctl calls the put(D2) routine of the queue
     pointed to by q, passing it the allocated message.

   Return Values
     On success, 1 is returned.  Otherwise, if type is a data type, or if a
     message block cannot be allocated, 0 is returned.

   Level
     Base or Interrupt.

   Synchronization Constraints
     Does not sleep.

     Driver-defined basic locks, read/write locks, and sleep locks may not be
     held across calls to this function.

   Examples
     The send_ctl routine is used to pass control messages downstream.
     M_BREAK messages are handled with putctl (line 9).  putctl1 (line 11) is
     used for M_DELAY messages, so that param can be used to specify the
     length of the delay.  If an invalid message type is detected, send_ctl
     returns 0, indicating failure (line 13).
      1  int
      2  send_ctl(wrq, type, param)
      3   queue_t *wrq;
      4   uchar_t type;
      5   uchar_t param;
      6  {
      7   switch (type) {
      8   case M_BREAK:
      9        return(putctl(wrq->q_next, M_BREAK));
     10   case M_DELAY:
     11        return(putctl1(wrq->q_next, M_DELAY, param));
     12   default:
     13        return(0);
     14   }
     15  }

REFERENCES
     put(D2), putctl1(D3)