williamr@2
|
1 |
/* $FreeBSD: src/sys/sys/sem.h,v 1.29 2004/11/17 13:12:06 rwatson Exp $ */
|
williamr@2
|
2 |
/* $NetBSD: sem.h,v 1.5 1994/06/29 06:45:15 cgd Exp $ */
|
williamr@2
|
3 |
|
williamr@2
|
4 |
/*
|
williamr@2
|
5 |
*© Portions copyright (c) 2006 Nokia Corporation. All rights reserved.
|
williamr@2
|
6 |
*© Portions copyright (c) 2006 Symbian Software Ltd. All rights reserved.
|
williamr@2
|
7 |
* SVID compatible sem.h file
|
williamr@2
|
8 |
*
|
williamr@2
|
9 |
* Author: Daniel Boulet
|
williamr@2
|
10 |
*/
|
williamr@2
|
11 |
|
williamr@2
|
12 |
#ifndef _SYS_SEM_H_
|
williamr@2
|
13 |
#define _SYS_SEM_H_
|
williamr@2
|
14 |
|
williamr@2
|
15 |
#include <sys/ipc.h>
|
williamr@2
|
16 |
|
williamr@2
|
17 |
|
williamr@2
|
18 |
struct sem {
|
williamr@2
|
19 |
u_short semval; /* semaphore value */
|
williamr@2
|
20 |
pid_t sempid; /* process ID of last operation */
|
williamr@2
|
21 |
u_short semncnt; /* number of processes waiting for semval
|
williamr@2
|
22 |
to become greater than current value */
|
williamr@2
|
23 |
u_short semzcnt; /* number of processes waiting for semval
|
williamr@2
|
24 |
to become 0 */
|
williamr@2
|
25 |
};
|
williamr@2
|
26 |
|
williamr@2
|
27 |
struct semid_ds {
|
williamr@2
|
28 |
struct ipc_perm sem_perm; /* operation permission struct */
|
williamr@2
|
29 |
struct sem *sem_base; /* pointer to first semaphore in set */
|
williamr@2
|
30 |
unsigned short sem_nsems; /* number of sems in set */
|
williamr@2
|
31 |
time_t sem_otime; /* last operation time */
|
williamr@2
|
32 |
long sem_pad1; /* SVABI/386 says I need this here */
|
williamr@2
|
33 |
time_t sem_ctime; /* last change time */
|
williamr@2
|
34 |
/* Times measured in secs since */
|
williamr@2
|
35 |
/* 00:00:00 GMT, Jan. 1, 1970 */
|
williamr@2
|
36 |
long sem_pad2; /* SVABI/386 says I need this here */
|
williamr@2
|
37 |
long sem_pad3[4]; /* SVABI/386 says I need this here */
|
williamr@2
|
38 |
};
|
williamr@2
|
39 |
|
williamr@2
|
40 |
/*
|
williamr@2
|
41 |
* semop's sops parameter structure
|
williamr@2
|
42 |
*/
|
williamr@2
|
43 |
struct sembuf {
|
williamr@2
|
44 |
unsigned short sem_num; /* semaphore # */
|
williamr@2
|
45 |
short sem_op; /* semaphore operation */
|
williamr@2
|
46 |
short sem_flg; /* operation flags */
|
williamr@2
|
47 |
};
|
williamr@2
|
48 |
#define SEM_UNDO 010000
|
williamr@2
|
49 |
|
williamr@2
|
50 |
/*
|
williamr@2
|
51 |
* semctl's arg parameter structure
|
williamr@2
|
52 |
*/
|
williamr@2
|
53 |
union semun {
|
williamr@2
|
54 |
int val; /* value for SETVAL */
|
williamr@2
|
55 |
struct semid_ds *buf; /* buffer for IPC_STAT & IPC_SET */
|
williamr@2
|
56 |
unsigned short *array; /* array for GETALL & SETALL */
|
williamr@2
|
57 |
};
|
williamr@2
|
58 |
|
williamr@2
|
59 |
/*
|
williamr@2
|
60 |
* commands for semctl
|
williamr@2
|
61 |
*/
|
williamr@2
|
62 |
#define GETNCNT 3 /* Return the value of semncnt {READ} */
|
williamr@2
|
63 |
#define GETPID 4 /* Return the value of sempid {READ} */
|
williamr@2
|
64 |
#define GETVAL 5 /* Return the value of semval {READ} */
|
williamr@2
|
65 |
#define GETALL 6 /* Return semvals into arg.array {READ} */
|
williamr@2
|
66 |
#define GETZCNT 7 /* Return the value of semzcnt {READ} */
|
williamr@2
|
67 |
#define SETVAL 8 /* Set the value of semval to arg.val {ALTER} */
|
williamr@2
|
68 |
#define SETALL 9 /* Set semvals from arg.array {ALTER} */
|
williamr@2
|
69 |
#define SEM_STAT 10 /* Like IPC_STAT but treats semid as sema-index */
|
williamr@2
|
70 |
#define SEM_INFO 11 /* Like IPC_INFO but treats semid as sema-index */
|
williamr@2
|
71 |
|
williamr@2
|
72 |
/*
|
williamr@2
|
73 |
* Permissions
|
williamr@2
|
74 |
*/
|
williamr@2
|
75 |
#define SEM_A IPC_W /* alter permission */
|
williamr@2
|
76 |
#define SEM_R IPC_R /* read permission */
|
williamr@2
|
77 |
|
williamr@2
|
78 |
#ifdef _KERNEL
|
williamr@2
|
79 |
|
williamr@2
|
80 |
/*
|
williamr@2
|
81 |
* semaphore info struct
|
williamr@2
|
82 |
*/
|
williamr@2
|
83 |
struct seminfo {
|
williamr@2
|
84 |
int semmap, /* # of entries in semaphore map */
|
williamr@2
|
85 |
semmni, /* # of semaphore identifiers */
|
williamr@2
|
86 |
semmns, /* # of semaphores in system */
|
williamr@2
|
87 |
semmnu, /* # of undo structures in system */
|
williamr@2
|
88 |
semmsl, /* max # of semaphores per id */
|
williamr@2
|
89 |
semopm, /* max # of operations per semop call */
|
williamr@2
|
90 |
semume, /* max # of undo entries per process */
|
williamr@2
|
91 |
semusz, /* size in bytes of undo structure */
|
williamr@2
|
92 |
semvmx, /* semaphore maximum value */
|
williamr@2
|
93 |
semaem; /* adjust on exit max value */
|
williamr@2
|
94 |
};
|
williamr@2
|
95 |
extern struct seminfo seminfo;
|
williamr@2
|
96 |
|
williamr@2
|
97 |
/*
|
williamr@2
|
98 |
* Kernel wrapper for the user-level structure
|
williamr@2
|
99 |
*/
|
williamr@2
|
100 |
struct semid_kernel {
|
williamr@2
|
101 |
struct semid_ds u;
|
williamr@2
|
102 |
struct label *label; /* MAC framework label */
|
williamr@2
|
103 |
};
|
williamr@2
|
104 |
|
williamr@2
|
105 |
/* internal "mode" bits */
|
williamr@2
|
106 |
#define SEM_ALLOC 01000 /* semaphore is allocated */
|
williamr@2
|
107 |
#define SEM_DEST 02000 /* semaphore will be destroyed on last detach */
|
williamr@2
|
108 |
|
williamr@2
|
109 |
/*
|
williamr@2
|
110 |
* Process sem_undo vectors at proc exit.
|
williamr@2
|
111 |
*/
|
williamr@2
|
112 |
void semexit(struct proc *p);
|
williamr@2
|
113 |
#endif /* _KERNEL */
|
williamr@2
|
114 |
|
williamr@2
|
115 |
#ifndef _KERNEL
|
williamr@2
|
116 |
#include <sys/cdefs.h>
|
williamr@2
|
117 |
#include <sys/_types.h>
|
williamr@2
|
118 |
|
williamr@2
|
119 |
#ifndef _SIZE_T_DECLARED
|
williamr@2
|
120 |
typedef __size_t size_t;
|
williamr@2
|
121 |
#define _SIZE_T_DECLARED
|
williamr@2
|
122 |
#endif
|
williamr@2
|
123 |
|
williamr@2
|
124 |
#ifndef _PID_T_DECLARED
|
williamr@2
|
125 |
typedef __pid_t pid_t;
|
williamr@2
|
126 |
#define _PID_T_DECLARED
|
williamr@2
|
127 |
#endif
|
williamr@2
|
128 |
|
williamr@2
|
129 |
// FUNCTION PROTOTYPES
|
williamr@2
|
130 |
|
williamr@2
|
131 |
|
williamr@2
|
132 |
// FORWARD DECLARATIONS
|
williamr@2
|
133 |
|
williamr@2
|
134 |
|
williamr@2
|
135 |
// CLASS/STRUCT/FUNCTION DECLARATION
|
williamr@2
|
136 |
|
williamr@2
|
137 |
__BEGIN_DECLS
|
williamr@2
|
138 |
|
williamr@2
|
139 |
/*
|
williamr@2
|
140 |
* Get semaphore identifier using the IPC key generated by ftok.
|
williamr@2
|
141 |
*/
|
williamr@2
|
142 |
|
williamr@2
|
143 |
IMPORT_C int semget(key_t key, int nsems, int semflg);
|
williamr@2
|
144 |
|
williamr@2
|
145 |
|
williamr@2
|
146 |
/*
|
williamr@2
|
147 |
* Perform atomically a user-defined array of semaphore operations on the set of
|
williamr@2
|
148 |
* semaphores associated with the semaphore identifier specified by the argument semid.
|
williamr@2
|
149 |
*/
|
williamr@2
|
150 |
|
williamr@2
|
151 |
IMPORT_C int semop(int semid, struct sembuf *sops, unsigned nsops);
|
williamr@2
|
152 |
|
williamr@2
|
153 |
|
williamr@2
|
154 |
/*
|
williamr@2
|
155 |
* Provides a variety of semaphore control operations as specified by cmd.
|
williamr@2
|
156 |
*/
|
williamr@2
|
157 |
IMPORT_C int semctl(int semid, int semnum, int cmd, ...);
|
williamr@2
|
158 |
|
williamr@2
|
159 |
|
williamr@2
|
160 |
__END_DECLS
|
williamr@2
|
161 |
#endif // #ifndef _KERNEL
|
williamr@2
|
162 |
|
williamr@2
|
163 |
#endif // _SYS_SEM_H_
|
williamr@2
|
164 |
|
williamr@2
|
165 |
// End of File
|