gonzui


Format: Advanced Search

t2ex/bsd_source/lib/libc/src_bsd/include/sys/event.hbare sourcepermlink (0.01 seconds)

Search this content:

    1: /*      $OpenBSD: event.h,v 1.15 2010/08/02 19:54:07 guenther Exp $  */
    2: 
    3: /*-
    4:  * Copyright (c) 1999,2000,2001 Jonathan Lemon <jlemon@FreeBSD.org>
    5:  * All rights reserved.
    6:  *
    7:  * Redistribution and use in source and binary forms, with or without
    8:  * modification, are permitted provided that the following conditions
    9:  * are met:
   10:  * 1. Redistributions of source code must retain the above copyright
   11:  *    notice, this list of conditions and the following disclaimer.
   12:  * 2. Redistributions in binary form must reproduce the above copyright
   13:  *    notice, this list of conditions and the following disclaimer in the
   14:  *    documentation and/or other materials provided with the distribution.
   15:  *
   16:  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
   17:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   18:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   19:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
   20:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   21:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   22:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   23:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   24:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   25:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   26:  * SUCH DAMAGE.
   27:  *
   28:  *      $FreeBSD: src/sys/sys/event.h,v 1.11 2001/02/24 01:41:31 jlemon Exp $
   29:  */
   30: 
   31: #ifndef _SYS_EVENT_H_
   32: #define _SYS_EVENT_H_
   33: 
   34: #define EVFILT_READ             (-1)
   35: #define EVFILT_WRITE            (-2)
   36: #define EVFILT_AIO              (-3)        /* attached to aio requests */
   37: #define EVFILT_VNODE            (-4)      /* attached to vnodes */
   38: #define EVFILT_PROC             (-5)       /* attached to struct proc */
   39: #define EVFILT_SIGNAL           (-6)     /* attached to struct proc */
   40: #define EVFILT_TIMER            (-7)      /* timers */
   41: 
   42: #define EVFILT_SYSCOUNT         7
   43: 
   44: #define EV_SET(kevp, a, b, c, d, e, f) do {     \
   45:         (kevp)->ident = (a);                   \
   46:         (kevp)->filter = (b);                  \
   47:         (kevp)->flags = (c);                   \
   48:         (kevp)->fflags = (d);                  \
   49:         (kevp)->data = (e);                    \
   50:         (kevp)->udata = (f);                   \
   51: } while(0)
   52: 
   53: struct kevent {
   54:         u_int          ident;          /* identifier for this event */
   55:         short          filter;         /* filter for event */
   56:         u_short                flags;
   57:         u_int          fflags;
   58:         int            data;
   59:         void           *udata;          /* opaque user data identifier */
   60: };
   61: 
   62: /* actions */
   63: #define EV_ADD          0x0001          /* add event to kq (implies enable) */
   64: #define EV_DELETE       0x0002                /* delete event from kq */
   65: #define EV_ENABLE       0x0004                /* enable event */
   66: #define EV_DISABLE      0x0008               /* disable event (not reported) */
   67: 
   68: /* flags */
   69: #define EV_ONESHOT      0x0010               /* only report one occurrence */
   70: #define EV_CLEAR        0x0020         /* clear event state after reporting */
   71: 
   72: #define EV_SYSFLAGS     0xF000              /* reserved by system */
   73: #define EV_FLAG1        0x2000         /* filter-specific flag */
   74: 
   75: /* returned values */
   76: #define EV_EOF          0x8000          /* EOF detected */
   77: #define EV_ERROR        0x4000         /* error, data contains errno */
   78: 
   79: /*
   80:  * data/hint flags for EVFILT_{READ|WRITE}, shared with userspace
   81:  */
   82: #define NOTE_LOWAT      0x0001                       /* low water mark */
   83: #define NOTE_EOF        0x0002                 /* return on EOF */
   84: 
   85: /*
   86:  * data/hint flags for EVFILT_VNODE, shared with userspace
   87:  */
   88: #define NOTE_DELETE     0x0001                      /* vnode was removed */
   89: #define NOTE_WRITE      0x0002                       /* data contents changed */
   90: #define NOTE_EXTEND     0x0004                      /* size increased */
   91: #define NOTE_ATTRIB     0x0008                      /* attributes changed */
   92: #define NOTE_LINK       0x0010                        /* link count changed */
   93: #define NOTE_RENAME     0x0020                      /* vnode was renamed */
   94: #define NOTE_REVOKE     0x0040                      /* vnode access was revoked */
   95: #define NOTE_TRUNCATE   0x0080                  /* vnode was truncated */
   96: 
   97: /*
   98:  * data/hint flags for EVFILT_PROC, shared with userspace
   99:  */
  100: #define NOTE_EXIT       0x80000000            /* process exited */
  101: #define NOTE_FORK       0x40000000            /* process forked */
  102: #define NOTE_EXEC       0x20000000            /* process exec'd */
  103: #define NOTE_PCTRLMASK  0xf0000000               /* mask for hint bits */
  104: #define NOTE_PDATAMASK  0x000fffff               /* mask for pid */
  105: 
  106: /* additional flags for EVFILT_PROC */
  107: #define NOTE_TRACK      0x00000001           /* follow across forks */
  108: #define NOTE_TRACKERR   0x00000002                /* could not track child */
  109: #define NOTE_CHILD      0x00000004           /* am a child process */
  110: 
  111: /*
  112:  * This is currently visible to userland to work around broken
  113:  * programs which pull in <sys/proc.h> or <sys/selinfo.h>.
  114:  */
  115: #include <sys/queue.h>
  116: struct knote;
  117: SLIST_HEAD(klist, knote);
  118: 
  119: #ifdef _KERNEL
  120: 
  121: #define KNOTE(list, hint)       do { \
  122:                                         if ((list) != NULL) \
  123:                                                 knote((list), (hint)); \
  124:                                 } while (0)
  125: 
  126: /*
  127:  * Flag indicating hint is a signal.  Used by EVFILT_SIGNAL, and also
  128:  * shared by EVFILT_PROC  (all knotes attached to p->p_klist)
  129:  */
  130: #define NOTE_SIGNAL     0x08000000
  131: 
  132: struct filterops {
  133:         int    f_isfd;            /* true if ident == filedescriptor */
  134:         int    (*f_attach)(struct knote *kn);
  135:         void   (*f_detach)(struct knote *kn);
  136:         int    (*f_event)(struct knote *kn, long hint);
  137: };
  138: 
  139: struct knote {
  140:         SLIST_ENTRY(knote)     kn_link;    /* for fd */
  141:         SLIST_ENTRY(knote)     kn_selnext; /* for struct selinfo */
  142:         TAILQ_ENTRY(knote)     kn_tqe;
  143:         struct                 kqueue *kn_kq;        /* which queue we are on */
  144:         struct                 kevent kn_kevent;
  145:         int                    kn_status;
  146:         int                    kn_sfflags;      /* saved filter flags */
  147:         int                    kn_sdata;        /* saved data field */
  148:         union {
  149:                 struct                file *p_fp;   /* file data pointer */
  150:                 struct                proc *p_proc; /* proc pointer */
  151:         } kn_ptr;
  152:         const struct           filterops *kn_fop;
  153:         void                   *kn_hook;
  154: #define KN_ACTIVE       0x01                  /* event has been triggered */
  155: #define KN_QUEUED       0x02                  /* event is on queue */
  156: #define KN_DISABLED     0x04                        /* event is disabled */
  157: #define KN_DETACHED     0x08                        /* knote is detached */
  158: 
  159: #define kn_id           kn_kevent.ident
  160: #define kn_filter       kn_kevent.filter
  161: #define kn_flags        kn_kevent.flags
  162: #define kn_fflags       kn_kevent.fflags
  163: #define kn_data         kn_kevent.data
  164: #define kn_fp           kn_ptr.p_fp
  165: };
  166: 
  167: struct proc;
  168: 
  169: extern void     knote(struct klist *list, long hint);
  170: extern void     knote_remove(struct proc *p, struct klist *list);
  171: extern void     knote_fdclose(struct proc *p, int fd);
  172: extern void     knote_processexit(struct process *);
  173: extern int      kqueue_register(struct kqueue *kq,
  174:                     struct kevent *kev, struct proc *p);
  175: extern int      filt_seltrue(struct knote *kn, long hint);
  176: extern int      seltrue_kqfilter(dev_t, struct knote *);
  177: extern void     klist_invalidate(struct klist *);
  178: 
  179: #else   /* !_KERNEL */
  180: 
  181: #include <sys/cdefs.h>
  182: struct timespec;
  183: 
  184: __BEGIN_DECLS
  185: int     kqueue(void);
  186: int     kevent(int kq, const struct kevent *changelist, int nchanges,
  187:                     struct kevent *eventlist, int nevents,
  188:                     const struct timespec *timeout);
  189: __END_DECLS
  190: 
  191: #endif /* !_KERNEL */
  192: 
  193: #endif /* !_SYS_EVENT_H_ */