rmvq(9f) 맨 페이지 - 윈디하나의 솔라나라

개요

섹션
맨 페이지 이름
검색(S)

rmvq(9f)

rmvq(9F)                       Kernel Functions                       rmvq(9F)

NAME
       rmvq - remove a message from a queue

SYNOPSIS
       #include <sys/stream.h>

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

INTERFACE LEVEL
       Architecture independent level 1 (DDI/DKI).

PARAMETERS
       q     Queue containing the message to be removed.


       mp    Message to remove.


DESCRIPTION
       The  rmvq()  function  removes a message from a queue. A message can be
       removed from anywhere on a queue. To prevent modules and  drivers  from
       having to deal with the internals of message linkage on a queue, either
       rmvq() or getq(9F) should be used to remove a message from a queue.

CONTEXT
       The  rmvq() function can be called from user, interrupt, or kernel con‐
       text.

EXAMPLES
       This code fragment illustrates how one may flush one  type  of  message
       from  a  queue.  In  this  case,  only  M_PROTO T_DATA_IND messages are
       flushed. For each message on the queue, if it  is  an  M_PROTO  message
       (line  8) of type T_DATA_IND (line 10), save a pointer to the next mes‐
       sage (line 11), remove the T_DATA_IND message (line  12)  and  free  it
       (line 13). Continue with the next message in the list (line 19).

         1  mblk_t *mp, *nmp;
         2  queue_t *q;
         3  union T_primitives *tp;
         4
         5    /* Insert code here to protect queue and message block */
         6    mp = q->q_first;
         7    while (mp) {
         8         if (mp->b_datap->db_type == M_PROTO) {
         9              tp = (union T_primitives *)mp->b_rptr;
         10             if (tp->type == T_DATA_IND) {
         11                  nmp = mp->b_next;
         12                  rmvq(q, mp);
         13                  freemsg(mp);
         14                  mp = nmp;
         15             } else {
         16                  mp = mp->b_next;
         17             }
         18        } else {
         19             mp = mp->b_next;
         20        }
         21   }
         22   /* End of region that must be protected */



       When using rmvq(), you must ensure that the queue and the message block
       is  not  modified  by  another thread at the same time. You can achieve
       this either by using STREAMS functions  or  by  implementing  your  own
       locking.

SEE ALSO
       insq(9F), freemsg(9F), getq(9F)


       Writing Device Drivers in Oracle Solaris 11.4


       STREAMS Programming Guide

WARNINGS
       Make sure that the message mp is linked onto q to avoid a possible sys‐
       tem panic.

Oracle Solaris 11.4               16 Jan 2006                         rmvq(9F)
맨 페이지 내용의 저작권은 맨 페이지 작성자에게 있습니다.
RSS ATOM XHTML 5 CSS3