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