GNU.WIKI: The GNU/Linux Knowledge Base

  [HOME] [PHP Manual] [HowTo] [ABS] [MAN1] [MAN2] [MAN3] [MAN4] [MAN5] [MAN6] [MAN7] [MAN8] [MAN9]

  [0-9] [Aa] [Bb] [Cc] [Dd] [Ee] [Ff] [Gg] [Hh] [Ii] [Jj] [Kk] [Ll] [Mm] [Nn] [Oo] [Pp] [Qq] [Rr] [Ss] [Tt] [Uu] [Vv] [Ww] [Xx] [Yy] [Zz]


       IV_EVENT_RAW_INIT,    iv_event_raw_register,   iv_event_raw_unregister,
       iv_event_raw_post - manage ivykis objects for event notification


       #include <iv_event_raw.h>

       struct iv_event_raw {
               void            *cookie;
               void            (*handler)(void *);

       void IV_EVENT_RAW_INIT(struct iv_event_raw *this);
       int iv_event_raw_register(struct iv_event_raw *this);
       void iv_event_raw_unregister(struct iv_event_raw *this);
       void iv_event_raw_post(struct iv_event_raw *this);


       iv_event_raw  provides  a  way  for  delivering  events  to   ivykis(3)
       recipients across thread and process boundaries.

       The  intended  event  recipient  calls  IV_EVENT_RAW_INIT  on  a struct
       iv_event_raw object, fills in ->cookie and ->handler,  and  then  calls
       iv_event_raw_register on the object.

       To   generate  an  event,  call  iv_event_raw_post  on  the  previously
       initialized struct iv_event_raw object.  This will cause  the  callback
       specified  by  ->handler  to  be  called  in the thread that the struct
       iv_event_raw object was  registered  in,  with  ->cookie  as  its  sole

       To     deinitialize     a     struct    iv_event_raw    object,    call
       iv_event_raw_unregister from the same thread that iv_event_raw_register
       was called from on that object.

       It  is  permitted  to  unregister a struct iv_event_raw object from any
       ivykis callback function in the thread it was registered in,  including
       from  a callback function triggered by this object, and it is permitted
       to free the memory corresponding to an unregistered object from its own
       callback function.

       iv_event_raw_post   can   be   called   from   the   same  thread  that
       iv_event_raw_register was called from, from a different thread  in  the
       same  process,  or  even  from  a  different process, and can safely be
       called from signal handlers.

       If posting an event only ever needs to be done  from  within  the  same
       process,   see   iv_event(3)   for   a  lighter-weight  alternative  to

       Internally,  iv_event_raw  is  implemented  by   registering   a   file
       descriptor (a struct iv_fd(3)) with the recipient thread's ivykis event
       loop, and by causing that file descriptor to  become  readable  upon  a
       call to iv_event_raw_post.

       If   eventfd(2)   is   available,  it  will  be  used  to  procure  the
       abovementioned file descriptor.  If not, iv_event_raw will fall back to
       pipe(2) as the source of its file descriptors.  eventfd(2) is preferred
       as it requires only one file  descriptor  table  entry  (while  pipe(2)
       requires two), and has much less kernel overhead than pipe(2) has.


       ivykis(3), iv_event(3), eventfd(2), pipe(2)

  All copyrights belong to their respective owners. Other content (c) 2014-2018, GNU.WIKI. Please report site errors to
Page load time: 0.097 seconds. Last modified: November 04 2018 12:49:43.