d: Merge upstream dmd, druntime 4c18eed967, phobos d945686a4.
[official-gcc.git] / libphobos / libdruntime / core / sys / posix / sys / ipc.d
blob32caba95a10778f6e07f174662880e7013b9d36b
1 /**
2 * D header file for POSIX.
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 */
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)
15 module core.sys.posix.sys.ipc;
17 import core.sys.posix.config;
18 public import core.sys.posix.sys.types; // for uid_t, gid_t, mode_t, key_t
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;
29 version (Posix):
30 extern (C) nothrow @nogc:
33 // XOpen (XSI)
36 struct ipc_perm
38 uid_t uid;
39 gid_t gid;
40 uid_t cuid;
41 gid_t cgid;
42 mode_t mode;
45 IPC_CREAT
46 IPC_EXCL
47 IPC_NOWAIT
49 IPC_PRIVATE
51 IPC_RMID
52 IPC_SET
53 IPC_STAT
56 version (linux)
58 struct ipc_perm
60 key_t __key;
61 uid_t uid;
62 gid_t gid;
63 uid_t cuid;
64 gid_t cgid;
65 ushort mode;
66 ushort __pad1;
67 ushort __seq;
68 ushort __pad2;
69 c_ulong __unused1;
70 c_ulong __unused2;
73 enum IPC_CREAT = 0x0200; // 01000
74 enum IPC_EXCL = 0x0400; // 02000
75 enum IPC_NOWAIT = 0x0800; // 04000
77 enum key_t IPC_PRIVATE = 0;
79 enum IPC_RMID = 0;
80 enum IPC_SET = 1;
81 enum IPC_STAT = 2;
83 else version (Darwin)
85 align(4) struct ipc_perm
87 uid_t uid;
88 gid_t gid;
89 uid_t cuid;
90 gid_t cgid;
91 mode_t mode;
92 ushort _seq;
93 key_t _key;
96 enum IPC_CREAT = 0x0200; // 01000
97 enum IPC_EXCL = 0x0400; // 02000
98 enum IPC_NOWAIT = 0x0800; // 04000
100 enum key_t IPC_PRIVATE = 0;
102 enum IPC_RMID = 0;
103 enum IPC_SET = 1;
104 enum IPC_STAT = 2;
106 else version (FreeBSD)
108 struct ipc_perm_old // <= FreeBSD7
110 ushort cuid;
111 ushort cguid;
112 ushort uid;
113 ushort gid;
114 ushort mode;
115 ushort seq;
116 key_t key;
119 struct ipc_perm
121 uid_t cuid;
122 gid_t cgid;
123 uid_t uid;
124 gid_t gid;
125 mode_t mode;
126 ushort seq;
127 key_t key;
130 enum IPC_CREAT = 0x0200; // 01000
131 enum IPC_EXCL = 0x0400; // 02000
132 enum IPC_NOWAIT = 0x0800; // 04000
134 enum key_t IPC_PRIVATE = 0;
136 enum IPC_RMID = 0;
137 enum IPC_SET = 1;
138 enum IPC_STAT = 2;
140 else version (NetBSD)
142 struct ipc_perm
144 uid_t cuid;
145 gid_t cgid;
146 uid_t uid;
147 gid_t gid;
148 mode_t mode;
149 ushort seq;
150 key_t key;
153 enum IPC_CREAT = 0x0100; // 01000
154 enum IPC_EXCL = 0x0200; // 02000
155 enum IPC_NOWAIT = 0x0400; // 04000
157 enum key_t IPC_PRIVATE = 0;
159 enum IPC_RMID = 0;
160 enum IPC_SET = 1;
161 enum IPC_STAT = 2;
163 else version (OpenBSD)
165 struct ipc_perm
167 uid_t cuid;
168 gid_t cgid;
169 uid_t uid;
170 gid_t gid;
171 mode_t mode;
172 ushort seq;
173 key_t key;
176 enum IPC_CREAT = 0x0200; // 01000
177 enum IPC_EXCL = 0x0400; // 02000
178 enum IPC_NOWAIT = 0x0800; // 04000
180 enum key_t IPC_PRIVATE = 0;
182 enum IPC_RMID = 0;
183 enum IPC_SET = 1;
184 enum IPC_STAT = 2;
186 else version (DragonFlyBSD)
188 struct ipc_perm
190 uid_t cuid;
191 gid_t cgid;
192 uid_t uid;
193 gid_t gid;
194 mode_t mode;
195 ushort seq;
196 key_t key;
199 enum IPC_CREAT = 0x0200; // 01000
200 enum IPC_EXCL = 0x0400; // 02000
201 enum IPC_NOWAIT = 0x0800; // 04000
203 enum key_t IPC_PRIVATE = 0;
205 enum IPC_RMID = 0;
206 enum IPC_SET = 1;
207 enum IPC_STAT = 2;
209 else version (Solaris)
211 version (D_LP64)
213 struct ipc_perm
215 uid_t uid;
216 gid_t gid;
217 uid_t cuid;
218 gid_t cgid;
219 mode_t mode;
220 uint seq;
221 key_t key;
224 else
226 struct ipc_perm
228 uid_t uid;
229 gid_t gid;
230 uid_t cuid;
231 gid_t cgid;
232 mode_t mode;
233 uint seq;
234 key_t key;
235 int[4] pad;
239 enum IPC_CREAT = 0x200;
240 enum IPC_EXCL = 0x400;
241 enum IPC_NOWAIT = 0x800;
243 enum key_t IPC_PRIVATE = 0;
245 enum IPC_RMID = 10;
246 enum IPC_SET = 11;
247 enum IPC_STAT = 12;
249 else
251 static assert(false, "Unsupported platform");
255 key_t ftok(const scope char*, int);
258 version (CRuntime_Glibc)
260 key_t ftok(const scope char*, int);
262 else version (Darwin)
264 key_t ftok(const scope char*, int);
266 else version (FreeBSD)
268 key_t ftok(const scope char*, int);
270 else version (NetBSD)
272 key_t ftok(const scope char*, int);
274 else version (OpenBSD)
276 key_t ftok(const scope char*, int);
278 else version (DragonFlyBSD)
280 key_t ftok(const scope char*, int);
282 else version (Solaris)
284 key_t ftok(const scope char*, int);
286 else version (CRuntime_Bionic)
288 key_t ftok(const scope char*, int);
290 else version (CRuntime_Musl)
292 key_t ftok(const scope char*, int);
294 else version (CRuntime_UClibc)
296 key_t ftok(const scope char*, int);
298 else
300 static assert(false, "Unsupported platform");