e74ea208da6f635e12085ef7a24df894a73f6e18
[musl] / include / sys / sem.h
1 #ifndef _SYS_SEM_H
2 #define _SYS_SEM_H
3 #ifdef __cplusplus
4 extern "C" {
5 #endif
6
7 #include <features.h>
8
9 #define __NEED_size_t
10 #define __NEED_pid_t
11 #define __NEED_time_t
12 #ifdef _GNU_SOURCE
13 #define __NEED_struct_timespec
14 #endif
15 #include <bits/alltypes.h>
16
17 #include <sys/ipc.h>
18
19 #define SEM_UNDO        0x1000
20 #define GETPID          11
21 #define GETVAL          12
22 #define GETALL          13
23 #define GETNCNT         14
24 #define GETZCNT         15
25 #define SETVAL          16
26 #define SETALL          17
27
28 #include <endian.h>
29
30 struct semid_ds {
31         struct ipc_perm sem_perm;
32         long sem_otime;
33         unsigned long __unused1;
34         long sem_ctime;
35         unsigned long __unused2;
36 #if __BYTE_ORDER == __LITTLE_ENDIAN
37         unsigned short sem_nsems;
38         char __sem_nsems_pad[sizeof(long)-sizeof(short)];
39 #else
40         char __sem_nsems_pad[sizeof(long)-sizeof(short)];
41         unsigned short sem_nsems;
42 #endif
43         unsigned long __unused3;
44         unsigned long __unused4;
45 };
46
47 #define _SEM_SEMUN_UNDEFINED 1
48
49 #define SEM_STAT 18
50 #define SEM_INFO 19
51
52 struct  seminfo {
53         int semmap;
54         int semmni;
55         int semmns;
56         int semmnu;
57         int semmsl;
58         int semopm;
59         int semume;
60         int semusz;
61         int semvmx;
62         int semaem;
63 };
64
65 struct sembuf {
66         unsigned short sem_num;
67         short sem_op;
68         short sem_flg;
69 };
70
71 int semctl(int, int, int, ...);
72 int semget(key_t, int, int);
73 int semop(int, struct sembuf *, size_t);
74
75 #ifdef _GNU_SOURCE
76 int semtimedop(int, struct sembuf *, size_t, const struct timespec *);
77 #endif
78
79 #ifdef __cplusplus
80 }
81 #endif
82 #endif