[BACK]Return to event.h CVS log [TXT][DIR] Up to [local] / sys / sys

Annotation of sys/sys/event.h, Revision 1.1

1.1     ! nbrk        1: /*     $OpenBSD: event.h,v 1.11 2007/05/30 00:23:48 tedu 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)      if ((list) != NULL) knote(list, hint)
        !           122:
        !           123: /*
        !           124:  * Flag indicating hint is a signal.  Used by EVFILT_SIGNAL, and also
        !           125:  * shared by EVFILT_PROC  (all knotes attached to p->p_klist)
        !           126:  */
        !           127: #define NOTE_SIGNAL    0x08000000
        !           128:
        !           129: struct filterops {
        !           130:        int     f_isfd;         /* true if ident == filedescriptor */
        !           131:        int     (*f_attach)(struct knote *kn);
        !           132:        void    (*f_detach)(struct knote *kn);
        !           133:        int     (*f_event)(struct knote *kn, long hint);
        !           134: };
        !           135:
        !           136: struct knote {
        !           137:        SLIST_ENTRY(knote)      kn_link;        /* for fd */
        !           138:        SLIST_ENTRY(knote)      kn_selnext;     /* for struct selinfo */
        !           139:        TAILQ_ENTRY(knote)      kn_tqe;
        !           140:        struct                  kqueue *kn_kq;  /* which queue we are on */
        !           141:        struct                  kevent kn_kevent;
        !           142:        int                     kn_status;
        !           143:        int                     kn_sfflags;     /* saved filter flags */
        !           144:        int                     kn_sdata;       /* saved data field */
        !           145:        union {
        !           146:                struct          file *p_fp;     /* file data pointer */
        !           147:                struct          proc *p_proc;   /* proc pointer */
        !           148:        } kn_ptr;
        !           149:        const struct            filterops *kn_fop;
        !           150:        void                    *kn_hook;
        !           151: #define KN_ACTIVE      0x01                    /* event has been triggered */
        !           152: #define KN_QUEUED      0x02                    /* event is on queue */
        !           153: #define KN_DISABLED    0x04                    /* event is disabled */
        !           154: #define KN_DETACHED    0x08                    /* knote is detached */
        !           155:
        !           156: #define kn_id          kn_kevent.ident
        !           157: #define kn_filter      kn_kevent.filter
        !           158: #define kn_flags       kn_kevent.flags
        !           159: #define kn_fflags      kn_kevent.fflags
        !           160: #define kn_data                kn_kevent.data
        !           161: #define kn_fp          kn_ptr.p_fp
        !           162: };
        !           163:
        !           164: struct proc;
        !           165:
        !           166: extern void    knote(struct klist *list, long hint);
        !           167: extern void    knote_remove(struct proc *p, struct klist *list);
        !           168: extern void    knote_fdclose(struct proc *p, int fd);
        !           169: extern int     kqueue_register(struct kqueue *kq,
        !           170:                    struct kevent *kev, struct proc *p);
        !           171: extern int     filt_seltrue(struct knote *kn, long hint);
        !           172: extern void    klist_invalidate(struct klist *);
        !           173:
        !           174: #else  /* !_KERNEL */
        !           175:
        !           176: #include <sys/cdefs.h>
        !           177: struct timespec;
        !           178:
        !           179: __BEGIN_DECLS
        !           180: int    kqueue(void);
        !           181: int    kevent(int kq, const struct kevent *changelist, int nchanges,
        !           182:                    struct kevent *eventlist, int nevents,
        !           183:                    const struct timespec *timeout);
        !           184: __END_DECLS
        !           185:
        !           186: #endif /* !_KERNEL */
        !           187:
        !           188: #endif /* !_SYS_EVENT_H_ */

CVSweb