1 /**
2 * D header file for POSIX.
3 *
4 * Copyright: Copyright Sean Kelly 2005 - 2009.
5 * License: $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0).
6 * Authors: Sean Kelly
7 * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition
8 */
9
10 /* Copyright Sean Kelly 2005 - 2009.
11 * Distributed under the Boost Software License, Version 1.0.
12 * (See accompanying file LICENSE or copy at
13 * http://www.boost.org/LICENSE_1_0.txt)
14 */
15 module core.sys.posix.sys.ipc;
16
17 import core.sys.posix.config;
18 public import core.sys.posix.sys.types; // for uid_t, gid_t, mode_t, key_t
19
20 version (OSX)
21 version = Darwin;
22 else version (iOS)
23 version = Darwin;
24 else version (TVOS)
25 version = Darwin;
26 else version (WatchOS)
27 version = Darwin;
28
version(Posix)29 version (Posix):
30 extern (C) nothrow @nogc:
31 @system:
32
33 //
34 // XOpen (XSI)
35 //
36 /*
37 struct ipc_perm
38 {
39 uid_t uid;
40 gid_t gid;
41 uid_t cuid;
42 gid_t cgid;
43 mode_t mode;
44 }
45
46 IPC_CREAT
47 IPC_EXCL
48 IPC_NOWAIT
49
50 IPC_PRIVATE
51
52 IPC_RMID
53 IPC_SET
54 IPC_STAT
55 */
56
57 version (linux)
58 {
59 struct ipc_perm
60 {
61 key_t __key;
62 uid_t uid;
63 gid_t gid;
64 uid_t cuid;
65 gid_t cgid;
66 ushort mode;
67 ushort __pad1;
68 ushort __seq;
69 ushort __pad2;
70 c_ulong __unused1;
71 c_ulong __unused2;
72 }
73
74 enum IPC_CREAT = 0x0200; // 01000
75 enum IPC_EXCL = 0x0400; // 02000
76 enum IPC_NOWAIT = 0x0800; // 04000
77
78 enum key_t IPC_PRIVATE = 0;
79
80 enum IPC_RMID = 0;
81 enum IPC_SET = 1;
82 enum IPC_STAT = 2;
83 }
version(Darwin)84 else version (Darwin)
85 {
86 align(4) struct ipc_perm
87 {
88 uid_t uid;
89 gid_t gid;
90 uid_t cuid;
91 gid_t cgid;
92 mode_t mode;
93 ushort _seq;
94 key_t _key;
95 }
96
97 enum IPC_CREAT = 0x0200; // 01000
98 enum IPC_EXCL = 0x0400; // 02000
99 enum IPC_NOWAIT = 0x0800; // 04000
100
101 enum key_t IPC_PRIVATE = 0;
102
103 enum IPC_RMID = 0;
104 enum IPC_SET = 1;
105 enum IPC_STAT = 2;
106 }
version(FreeBSD)107 else version (FreeBSD)
108 {
109 struct ipc_perm_old // <= FreeBSD7
110 {
111 ushort cuid;
112 ushort cguid;
113 ushort uid;
114 ushort gid;
115 ushort mode;
116 ushort seq;
117 key_t key;
118 }
119
120 struct ipc_perm
121 {
122 uid_t cuid;
123 gid_t cgid;
124 uid_t uid;
125 gid_t gid;
126 mode_t mode;
127 ushort seq;
128 key_t key;
129 }
130
131 enum IPC_CREAT = 0x0200; // 01000
132 enum IPC_EXCL = 0x0400; // 02000
133 enum IPC_NOWAIT = 0x0800; // 04000
134
135 enum key_t IPC_PRIVATE = 0;
136
137 enum IPC_RMID = 0;
138 enum IPC_SET = 1;
139 enum IPC_STAT = 2;
140 }
version(NetBSD)141 else version (NetBSD)
142 {
143 struct ipc_perm
144 {
145 uid_t cuid;
146 gid_t cgid;
147 uid_t uid;
148 gid_t gid;
149 mode_t mode;
150 ushort seq;
151 key_t key;
152 }
153
154 enum IPC_CREAT = 0x0100; // 01000
155 enum IPC_EXCL = 0x0200; // 02000
156 enum IPC_NOWAIT = 0x0400; // 04000
157
158 enum key_t IPC_PRIVATE = 0;
159
160 enum IPC_RMID = 0;
161 enum IPC_SET = 1;
162 enum IPC_STAT = 2;
163 }
version(OpenBSD)164 else version (OpenBSD)
165 {
166 struct ipc_perm
167 {
168 uid_t cuid;
169 gid_t cgid;
170 uid_t uid;
171 gid_t gid;
172 mode_t mode;
173 ushort seq;
174 key_t key;
175 }
176
177 enum IPC_CREAT = 0x0200; // 01000
178 enum IPC_EXCL = 0x0400; // 02000
179 enum IPC_NOWAIT = 0x0800; // 04000
180
181 enum key_t IPC_PRIVATE = 0;
182
183 enum IPC_RMID = 0;
184 enum IPC_SET = 1;
185 enum IPC_STAT = 2;
186 }
version(DragonFlyBSD)187 else version (DragonFlyBSD)
188 {
189 struct ipc_perm
190 {
191 uid_t cuid;
192 gid_t cgid;
193 uid_t uid;
194 gid_t gid;
195 mode_t mode;
196 ushort seq;
197 key_t key;
198 }
199
200 enum IPC_CREAT = 0x0200; // 01000
201 enum IPC_EXCL = 0x0400; // 02000
202 enum IPC_NOWAIT = 0x0800; // 04000
203
204 enum key_t IPC_PRIVATE = 0;
205
206 enum IPC_RMID = 0;
207 enum IPC_SET = 1;
208 enum IPC_STAT = 2;
209 }
version(Solaris)210 else version (Solaris)
211 {
212 version (D_LP64)
213 {
214 struct ipc_perm
215 {
216 uid_t uid;
217 gid_t gid;
218 uid_t cuid;
219 gid_t cgid;
220 mode_t mode;
221 uint seq;
222 key_t key;
223 }
224 }
225 else
226 {
227 struct ipc_perm
228 {
229 uid_t uid;
230 gid_t gid;
231 uid_t cuid;
232 gid_t cgid;
233 mode_t mode;
234 uint seq;
235 key_t key;
236 int[4] pad;
237 }
238 }
239
240 enum IPC_CREAT = 0x200;
241 enum IPC_EXCL = 0x400;
242 enum IPC_NOWAIT = 0x800;
243
244 enum key_t IPC_PRIVATE = 0;
245
246 enum IPC_RMID = 10;
247 enum IPC_SET = 11;
248 enum IPC_STAT = 12;
249 }
250 else
251 {
252 static assert(false, "Unsupported platform");
253 }
254
255 /*
256 key_t ftok(const scope char*, int);
257 */
258
259 version (CRuntime_Glibc)
260 {
261 key_t ftok(const scope char*, int);
262 }
263 else version (Darwin)
264 {
265 key_t ftok(const scope char*, int);
266 }
267 else version (FreeBSD)
268 {
269 key_t ftok(const scope char*, int);
270 }
271 else version (NetBSD)
272 {
273 key_t ftok(const scope char*, int);
274 }
275 else version (OpenBSD)
276 {
277 key_t ftok(const scope char*, int);
278 }
279 else version (DragonFlyBSD)
280 {
281 key_t ftok(const scope char*, int);
282 }
283 else version (Solaris)
284 {
285 key_t ftok(const scope char*, int);
286 }
287 else version (CRuntime_Bionic)
288 {
289 key_t ftok(const scope char*, int);
290 }
291 else version (CRuntime_Musl)
292 {
293 key_t ftok(const scope char*, int);
294 }
295 else version (CRuntime_UClibc)
296 {
297 key_t ftok(const scope char*, int);
298 }
299 else
300 {
301 static assert(false, "Unsupported platform");
302 }
303