The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/sys/sem.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /* $FreeBSD: releng/10.1/sys/sys/sem.h 224016 2011-07-14 14:18:14Z bz $ */
    2 /*      $NetBSD: sem.h,v 1.5 1994/06/29 06:45:15 cgd Exp $      */
    3 
    4 /*
    5  * SVID compatible sem.h file
    6  *
    7  * Author:  Daniel Boulet
    8  */
    9 
   10 #ifndef _SYS_SEM_H_
   11 #define _SYS_SEM_H_
   12 
   13 #include <sys/ipc.h>
   14 
   15 #ifndef _PID_T_DECLARED
   16 typedef __pid_t         pid_t;
   17 #define _PID_T_DECLARED
   18 #endif
   19 
   20 #ifndef _SIZE_T_DECLARED
   21 typedef __size_t        size_t;
   22 #define _SIZE_T_DECLARED
   23 #endif
   24 
   25 #ifndef _TIME_T_DECLARED
   26 typedef __time_t        time_t;
   27 #define _TIME_T_DECLARED
   28 #endif
   29 
   30 #if defined(COMPAT_FREEBSD4) || defined(COMPAT_FREEBSD5) || \
   31     defined(COMPAT_FREEBSD6) || defined(COMPAT_FREEBSD7)
   32 struct semid_ds_old {
   33         struct ipc_perm_old sem_perm;   /* operation permission struct */
   34         struct sem      *sem_base;      /* pointer to first semaphore in set */
   35         unsigned short  sem_nsems;      /* number of sems in set */
   36         time_t          sem_otime;      /* last operation time */
   37         long            sem_pad1;       /* SVABI/386 says I need this here */
   38         time_t          sem_ctime;      /* last change time */
   39                                         /* Times measured in secs since */
   40                                         /* 00:00:00 GMT, Jan. 1, 1970 */
   41         long            sem_pad2;       /* SVABI/386 says I need this here */
   42         long            sem_pad3[4];    /* SVABI/386 says I need this here */
   43 };
   44 #endif
   45 
   46 struct semid_ds {
   47         struct ipc_perm sem_perm;       /* operation permission struct */
   48         struct sem      *sem_base;      /* pointer to first semaphore in set */
   49         unsigned short  sem_nsems;      /* number of sems in set */
   50         time_t          sem_otime;      /* last operation time */
   51         time_t          sem_ctime;      /* last change time */
   52                                         /* Times measured in secs since */
   53                                         /* 00:00:00 GMT, Jan. 1, 1970 */
   54 };
   55 
   56 /*
   57  * semop's sops parameter structure
   58  */
   59 struct sembuf {
   60         unsigned short  sem_num;        /* semaphore # */
   61         short           sem_op;         /* semaphore operation */
   62         short           sem_flg;        /* operation flags */
   63 };
   64 #define SEM_UNDO        010000
   65 
   66 #if defined(COMPAT_FREEBSD4) || defined(COMPAT_FREEBSD5) || \
   67     defined(COMPAT_FREEBSD6) || defined(COMPAT_FREEBSD7) || \
   68     defined(_WANT_SEMUN_OLD)
   69 union semun_old {
   70         int             val;            /* value for SETVAL */
   71         struct          semid_ds_old *buf; /* buffer for IPC_STAT & IPC_SET */
   72         unsigned short  *array;         /* array for GETALL & SETALL */
   73 };
   74 #endif
   75 
   76 /*
   77  * semctl's arg parameter structure
   78  */
   79 union semun {
   80         int             val;            /* value for SETVAL */
   81         struct          semid_ds *buf;  /* buffer for IPC_STAT & IPC_SET */
   82         unsigned short  *array;         /* array for GETALL & SETALL */
   83 };
   84 
   85 /*
   86  * commands for semctl
   87  */
   88 #define GETNCNT 3       /* Return the value of semncnt {READ} */
   89 #define GETPID  4       /* Return the value of sempid {READ} */
   90 #define GETVAL  5       /* Return the value of semval {READ} */
   91 #define GETALL  6       /* Return semvals into arg.array {READ} */
   92 #define GETZCNT 7       /* Return the value of semzcnt {READ} */
   93 #define SETVAL  8       /* Set the value of semval to arg.val {ALTER} */
   94 #define SETALL  9       /* Set semvals from arg.array {ALTER} */
   95 #define SEM_STAT 10     /* Like IPC_STAT but treats semid as sema-index */
   96 #define SEM_INFO 11     /* Like IPC_INFO but treats semid as sema-index */
   97 
   98 /*
   99  * Permissions
  100  */
  101 #define SEM_A           IPC_W   /* alter permission */
  102 #define SEM_R           IPC_R   /* read permission */
  103 
  104 #ifdef _KERNEL
  105 
  106 /*
  107  * semaphore info struct
  108  */
  109 struct seminfo {
  110         int     semmni,         /* # of semaphore identifiers */
  111                 semmns,         /* # of semaphores in system */
  112                 semmnu,         /* # of undo structures in system */
  113                 semmsl,         /* max # of semaphores per id */
  114                 semopm,         /* max # of operations per semop call */
  115                 semume,         /* max # of undo entries per process */
  116                 semusz,         /* size in bytes of undo structure */
  117                 semvmx,         /* semaphore maximum value */
  118                 semaem;         /* adjust on exit max value */
  119 };
  120 extern struct seminfo   seminfo;
  121 
  122 /*
  123  * Kernel wrapper for the user-level structure
  124  */
  125 struct semid_kernel {
  126         struct  semid_ds u;
  127         struct  label *label;   /* MAC framework label */
  128         struct  ucred *cred;    /* creator's credentials */
  129 };
  130 
  131 /* internal "mode" bits */
  132 #define SEM_ALLOC       01000   /* semaphore is allocated */
  133 #define SEM_DEST        02000   /* semaphore will be destroyed on last detach */
  134 
  135 /*
  136  * Process sem_undo vectors at proc exit.
  137  */
  138 void    semexit(struct proc *p);
  139 
  140 #else /* ! _KERNEL */
  141 
  142 __BEGIN_DECLS
  143 #if __BSD_VISIBLE
  144 int semsys(int, ...);
  145 #endif
  146 int semctl(int, int, int, ...);
  147 int semget(key_t, int, int);
  148 int semop(int, struct sembuf *, size_t);
  149 __END_DECLS
  150 
  151 #endif /* !_KERNEL */
  152 
  153 #endif /* !_SYS_SEM_H_ */

Cache object: 2adde955694610a7a50b77cc59e14583


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.