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