home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 15 / 15.iso / s / s053 / 8.ddi / usr / include / sys / sem.h < prev    next >
Encoding:
C/C++ Source or Header  |  1990-12-08  |  5.0 KB  |  193 lines

  1. /*    Copyright (c) 1990 UNIX System Laboratories, Inc.    */
  2. /*    Copyright (c) 1984, 1986, 1987, 1988, 1989, 1990 AT&T    */
  3. /*      All Rights Reserved      */
  4.  
  5. /*    THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF         */
  6. /*    UNIX System Laboratories, Inc.                         */
  7. /*    The copyright notice above does not evidence any       */
  8. /*    actual or intended publication of such source code.    */
  9.  
  10. #ifndef _SYS_SEM_H
  11. #define _SYS_SEM_H
  12.  
  13. #ident    "@(#)/usr/include/sys/sem.h.sl 1.1 4.0 12/08/90 37741 AT&T-USL"
  14.  
  15. /*
  16.  * IPC Semaphore Facility.
  17.  */
  18.  
  19. /*
  20.  * Implementation Constants.
  21.  */
  22.  
  23. #define    PSEMN    (PZERO + 3)    /* sleep priority waiting for greater value */
  24. #define    PSEMZ    (PZERO + 2)    /* sleep priority waiting for zero */
  25.  
  26. /*
  27.  * Permission Definitions.
  28.  */
  29.  
  30. #define    SEM_A    0200    /* alter permission */
  31. #define    SEM_R    0400    /* read permission */
  32.  
  33. /*
  34.  * Semaphore Operation Flags.
  35.  */
  36.  
  37. #define    SEM_UNDO    010000    /* set up adjust on exit entry */
  38.  
  39. /*
  40.  * Semctl Command Definitions.
  41.  */
  42.  
  43. #define    GETNCNT    3    /* get semncnt */
  44. #define    GETPID    4    /* get sempid */
  45. #define    GETVAL    5    /* get semval */
  46. #define    GETALL    6    /* get all semval's */
  47. #define    GETZCNT    7    /* get semzcnt */
  48. #define    SETVAL    8    /* set semval */
  49. #define    SETALL    9    /* set all semval's */
  50.  
  51. /*
  52.  * Structure Definitions.
  53.  */
  54.  
  55. /*
  56.  * There is one semaphore id data structure (semid_ds) for each set of semaphores
  57.  * in the system.
  58.  */
  59.  
  60.  
  61. #if defined(_KERNEL) || defined(_KMEMUSER)
  62. /* expanded semid_ds structure */
  63. struct semid_ds {
  64.     struct ipc_perm sem_perm;    /* operation permission struct */
  65.     struct sem    *sem_base;    /* ptr to first semaphore in set */
  66.     ushort        sem_nsems;    /* # of semaphores in set */
  67.     time_t        sem_otime;    /* last semop time */
  68.     long        sem_pad1;    /* reserved for time_t expansion */
  69.     time_t        sem_ctime;    /* last change time */
  70.     long        sem_pad2;    /* time_t expansion */
  71.     long        sem_pad3[4];        /* reserve area */
  72. };
  73. /* SVR3 structure */
  74. struct o_semid_ds {
  75.     struct o_ipc_perm sem_perm;    /* operation permission struct */
  76.     struct o_sem    *sem_base;    /* ptr to first semaphore in set */
  77.     ushort        sem_nsems;    /* # of semaphores in set */
  78.     time_t        sem_otime;    /* last semop time */
  79.     time_t        sem_ctime;    /* last change time */
  80. };
  81. /*
  82.  * There is one semaphore structure (sem) for each semaphore in the system.
  83.  */
  84.  
  85. struct sem {
  86.     ushort    semval;        /* semaphore value */
  87.     pid_t    sempid;        /* pid of last operation */
  88.     ushort    semncnt;    /* # awaiting semval > cval */
  89.     ushort    semzcnt;    /* # awaiting semval = 0 */
  90. };
  91.  
  92. /* SVR3 sem structure */
  93. struct o_sem {
  94.     ushort    semval;        /* semaphore value */
  95.     o_pid_t    sempid;        /* pid of last operation */
  96.     ushort    semncnt;    /* # awaiting semval > cval */
  97.     ushort    semzcnt;    /* # awaiting semval = 0 */
  98. };
  99.  
  100.  
  101. #else        /* user level definition */
  102.  
  103. #if !defined(_STYPES)
  104.  
  105. struct semid_ds {
  106.     struct ipc_perm sem_perm;    /* operation permission struct */
  107.     struct sem    *sem_base;    /* ptr to first semaphore in set */
  108.     ushort        sem_nsems;    /* # of semaphores in set */
  109.     time_t        sem_otime;    /* last semop time */
  110.     long        sem_pad1;    /* reserved for time_t expansion */
  111.     time_t        sem_ctime;    /* last change time */
  112.     long        sem_pad2;        /* time_t expansion */
  113.     long        sem_pad3[4];        /* reserve area */
  114. };
  115.  
  116. struct sem {
  117.     ushort    semval;        /* semaphore value */
  118.     pid_t    sempid;        /* pid of last operation */
  119.     ushort    semncnt;    /* # awaiting semval > cval */
  120.     ushort    semzcnt;    /* # awaiting semval = 0 */
  121. };
  122.  
  123. #else    /* SVR3 definition */
  124.  
  125. struct semid_ds {
  126.     struct ipc_perm sem_perm;    /* operation permission struct */
  127.     struct sem    *sem_base;    /* ptr to first semaphore in set */
  128.     ushort        sem_nsems;    /* # of semaphores in set */
  129.     time_t        sem_otime;    /* last semop time */
  130.     time_t        sem_ctime;    /* last change time */
  131. };
  132.  
  133. struct sem {
  134.     ushort    semval;        /* semaphore value */
  135.     o_pid_t    sempid;        /* pid of last operation */
  136.     ushort    semncnt;    /* # awaiting semval > cval */
  137.     ushort    semzcnt;    /* # awaiting semval = 0 */
  138. };
  139.  
  140. #endif    /* !defined(_STYPES) */
  141. #endif    /* defined(_KERNEL) */
  142.  
  143.  
  144.  
  145.  
  146. /*
  147.  * There is one undo structure per process in the system.
  148.  */
  149.  
  150. struct sem_undo {
  151.     struct sem_undo    *un_np;    /* ptr to next active undo structure */
  152.     short        un_cnt;    /* # of active entries */
  153.     struct undo {
  154.         short    un_aoe;    /* adjust on exit values */
  155.         ushort    un_num;    /* semaphore # */
  156.         int    un_id;    /* semid */
  157.     }    un_ent[1];    /* undo entries (one minimum) */
  158. };
  159.  
  160. /*
  161.  * Semaphore information structure
  162.  */
  163. struct    seminfo    {
  164.     int    semmap;        /* # of entries in semaphore map */
  165.     int    semmni;        /* # of semaphore identifiers */
  166.     int    semmns;        /* # of semaphores in system */
  167.     int    semmnu;        /* # of undo structures in system */
  168.     int    semmsl;        /* max # of semaphores per id */
  169.     int    semopm;        /* max # of operations per semop call */
  170.     int    semume;        /* max # of undo entries per process */
  171.     int    semusz;        /* size in bytes of undo structure */
  172.     int    semvmx;        /* semaphore maximum value */
  173.     int    semaem;        /* adjust on exit max value */
  174. };
  175.  
  176. /*
  177.  * User semaphore template for semop system calls.
  178.  */
  179.  
  180. struct sembuf {
  181.     ushort    sem_num;    /* semaphore # */
  182.     short    sem_op;        /* semaphore operation */
  183.     short    sem_flg;    /* operation flags */
  184. };
  185.  
  186. #if defined(__STDC__) && !defined(_KERNEL)
  187. int semctl(int, int, int, ...);
  188. int semget(key_t, int, int);
  189. int semop(int, struct sembuf *, unsigned);
  190. #endif
  191.  
  192. #endif    /* _SYS_SEM_H */
  193.