qreply(9F)




NAME

     qreply - send a message on a stream in the reverse direction


SYNOPSIS

     #include <sys/stream.h>

     void qreply(queue_t *q, mblk_t *mp);


INTERFACE LEVEL

     Architecture independent level 1 (DDI/DKI).


PARAMETERS

     q     Pointer to the queue.

     mp    Pointer to the message to  be  sent  in  the  opposite
           direction.


DESCRIPTION

     qreply() sends messages in the reverse direction  of  normal
     flow.    That   is,   qreply(q,   mp)   is   equivalent   to
     putnext(OTHERQ(q), mp).


CONTEXT

     qreply() can be called from user or interrupt context.


EXAMPLES

     Example 1: Canonical Flushing Code for STREAMS Drivers.

     This example depicts the canonical flushing code for STREAMS
     drivers.   Assume  that the driver has service procedures so
     that there may be messages on its queues. See  srv(9E).  Its
     write-side  put  procedure handles M_FLUSH messages by first
     checking the FLUSHW bit  in the first byte of  the  message,
     then the write queue is flushed (line 8) and the  FLUSHW bit
     is turned off (line 9). See put(9E). If the
      FLUSHR bit is on, then the read queue is flushed (line  12)
     and  the message is sent back up the read side of the stream
     with the  qreply(9F) function (line 13). If the  FLUSHR  bit
     is off, then the message is freed (line 15). See the example
     for  flushq(9F) for the canonical flushing code for modules.

      1  xxxwput(q, mp)
      2    queue_t *q;
      3    mblk_t *mp;
      4  {
      5       switch(mp->b_datap->db_type) {
      6       case M_FLUSH:
      7           if (*mp->b_rptr & FLUSHW) {
      8                  flushq(q, FLUSHALL);
      9                  *mp->b_rptr &= ~FLUSHW;
     10             }
     11           if (*mp->b_rptr & FLUSHR) {
     12                  flushq(RD(q), FLUSHALL);
     13                    qreply(q, mp);
     14           } else {
     15                    freemsg(mp);
     16             }
     17           break;
                . . .
     18     }
     19  }


SEE ALSO

     put(9E), srv(9E), flushq(9F), OTHERQ(9F), putnext(9F)

     Writing Device Drivers

      STREAMS Programming Guide


Man(1) output converted with man2html