1/*
2 * Copyright 2008-2012 Haiku, Inc. All Rights Reserved.
3 * Distributed under the terms of the MIT License.
4 */
5#ifndef _SYS_SEM_H
6#define _SYS_SEM_H
7
8
9#include <sys/cdefs.h>
10#include <sys/ipc.h>
11#include <sys/types.h>
12
13
14/* Semaphore operation flags */
15#define SEM_UNDO	10
16
17/* Command definition for semctl */
18#define GETPID		3	/* Get process ID of last element manipulating */
19#define GETVAL		4	/* Get semval */
20#define GETALL		5	/* Get all semval */
21#define GETNCNT		6	/* Get semncnt */
22#define GETZCNT		7	/* Get semzcnt */
23#define SETVAL		8	/* Set semval */
24#define SETALL		9	/* Set all semval */
25
26struct semid_ds {
27	struct ipc_perm		sem_perm;	/* Operation permission structure */
28	unsigned short		sem_nsems;	/* Number of semaphores in set */
29	time_t				sem_otime;	/* Last semop */
30	time_t				sem_ctime;	/* Last time changed by semctl */
31};
32
33/* Structure passed as parameter to the semop function */
34struct sembuf {
35	unsigned short	sem_num;	/* Semaphore number */
36	short			sem_op;		/* Semaphore operation */
37	short			sem_flg;	/* Operation flags */
38};
39
40/*
41 * Semaphore info structure. Useful for the ipcs
42 * standard utily
43 */
44struct seminfo {
45	int	semmni;	/* Number of semaphore identifies */
46	int semmns;	/* Number of semaphore in system */
47	int semmnu;	/* Number of undo structures in system */
48	int semmsl;	/* Max number of semaphores per id */
49	int semopm;	/* Max number of operations per semop call */
50	int semume;	/* Max number of undo entries per process */
51	int semusz;	/* Size in bytes of undo structure */
52	int semvmx;	/* Semaphore maximum valure */
53	int semaem;	/* adjust on exit max value */
54};
55
56
57__BEGIN_DECLS
58
59int		semctl(int semID, int semNum, int command, ...);
60int		semget(key_t key, int numSems, int semFlags);
61int		semop(int semID, struct sembuf *semOps, size_t numSemOps);
62
63__END_DECLS
64
65#endif	/* _SYS_SEM_H */
66