1 /**
2  * D header file for POSIX.
3  *
4  * Copyright: Public Domain
5  * License:   Public Domain
6  * Authors:   Sean Kelly
7  * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition
8  */
9 module tango.stdc.posix.sys.mman;
10 
11 private import tango.stdc.posix.config;
12 public import tango.stdc.stddef;          // for size_t
13 public import tango.stdc.posix.sys.types; // for off_t, mode_t
14 
15 extern (C):
16 
17 //
18 // Advisory Information (ADV)
19 //
20 /*
21 int posix_madvise(void*, size_t, int);
22 */
23 
24 //
25 // Advisory Information and either Memory Mapped Files or Shared Memory Objects (MC1)
26 //
27 /*
28 POSIX_MADV_NORMAL
29 POSIX_MADV_SEQUENTIAL
30 POSIX_MADV_RANDOM
31 POSIX_MADV_WILLNEED
32 POSIX_MADV_DONTNEED
33 */
34 
35 version( linux )
36 {
37     const POSIX_MADV_NORMAL     = 0;
38     const POSIX_MADV_RANDOM     = 1;
39     const POSIX_MADV_SEQUENTIAL = 2;
40     const POSIX_MADV_WILLNEED   = 3;
41     const POSIX_MADV_DONTNEED   = 4;
42 }
43 else version(OSX)
44 {
45     const POSIX_MADV_NORMAL     = 0;
46     const POSIX_MADV_RANDOM     = 1;
47     const POSIX_MADV_SEQUENTIAL = 2;
48     const POSIX_MADV_WILLNEED   = 3;
49     const POSIX_MADV_DONTNEED   = 4;
50 }
51 else version( FreeBSD )
52 {
53     const POSIX_MADV_NORMAL     = 0;
54     const POSIX_MADV_RANDOM     = 1;
55     const POSIX_MADV_SEQUENTIAL = 2;
56     const POSIX_MADV_WILLNEED   = 3;
57     const POSIX_MADV_DONTNEED   = 4;
58 }
59 else version( solaris )
60 {
61 	enum
62 	{
63 		POSIX_MADV_NORMAL     = 0,
64 	    POSIX_MADV_RANDOM     = 1,
65 	    POSIX_MADV_SEQUENTIAL = 2,
66 	    POSIX_MADV_WILLNEED   = 3,
67 	    POSIX_MADV_DONTNEED   = 4
68 	}
69 }
70 
71 //
72 // Memory Mapped Files, Shared Memory Objects, or Memory Protection (MC2)
73 //
74 /*
75 PROT_READ
76 PROT_WRITE
77 PROT_EXEC
78 PROT_NONE
79 */
80 
81 version( linux )
82 {
83     const PROT_NONE     = 0x0;
84     const PROT_READ     = 0x1;
85     const PROT_WRITE    = 0x2;
86     const PROT_EXEC     = 0x4;
87 }
88 else version(OSX)
89 {
90     const PROT_NONE     = 0x00;
91     const PROT_READ     = 0x01;
92     const PROT_WRITE    = 0x02;
93     const PROT_EXEC     = 0x04;
94 }
95 else version( FreeBSD )
96 {
97     const PROT_NONE     = 0x00;
98     const PROT_READ     = 0x01;
99     const PROT_WRITE    = 0x02;
100     const PROT_EXEC     = 0x04;
101 }
102 else version( solaris )
103 {
104 	enum
105 	{
106 		PROT_NONE     = 0x00,
107 	    PROT_READ     = 0x01,
108 	    PROT_WRITE    = 0x02,
109 	    PROT_EXEC     = 0x04
110 	}
111 }
112 
113 //
114 // Memory Mapped Files, Shared Memory Objects, or Typed Memory Objects (MC3)
115 //
116 /*
117 void* mmap(void*, size_t, int, int, int, off_t);
118 int munmap(void*, size_t);
119 */
120 
121 version( linux )
122 {
123     //void* mmap(void*, size_t, int, int, int, off_t);
124     int   munmap(void*, size_t);
125 
126   static if( __USE_LARGEFILE64 )
127   {
128     void* mmap64(void*, size_t, int, int, int, off_t);
129     alias mmap64 mmap;
130   }
131   else
132   {
133     void* mmap(void*, size_t, int, int, int, off_t);
134   }
135 }
136 else version(OSX)
137 {
138     void* mmap(void*, size_t, int, int, int, off_t);
139     int   munmap(void*, size_t);
140 }
141 else version( FreeBSD )
142 {
143     void* mmap(void*, size_t, int, int, int, off_t);
144     int   munmap(void*, size_t);
145 }
146 else version( solaris )
147 {
148     int   munmap(void*, size_t);
149 
150   version(X86_64)
151 	void* mmap(void*, size_t, int, int, int, off_t);
152   else static if( __USE_LARGEFILE64 )
153   {
154     void* mmap64(void*, size_t, int, int, int, off_t);
155     alias mmap64 mmap;
156   }
157   else
158     void* mmap(void*, size_t, int, int, int, off_t);
159 }
160 
161 //
162 // Memory Mapped Files (MF)
163 //
164 /*
165 MAP_SHARED (MF|SHM)
166 MAP_PRIVATE (MF|SHM)
167 MAP_FIXED  (MF|SHM)
168 MAP_FAILED (MF|SHM)
169 
170 MS_ASYNC (MF|SIO)
171 MS_SYNC (MF|SIO)
172 MS_INVALIDATE (MF|SIO)
173 
174 int msync(void*, size_t, int); (MF|SIO)
175 */
176 
177 version( linux )
178 {
179     const MAP_SHARED    = 0x01;
180     const MAP_PRIVATE   = 0x02;
181     const MAP_FIXED     = 0x10;
182     const MAP_ANON      = 0x20; // non-standard
183 
184     const MAP_FAILED    = cast(void*) -1;
185 
186     enum
187     {
188         MS_ASYNC        = 1,
189         MS_SYNC         = 4,
190         MS_INVALIDATE   = 2
191     }
192 
193     int msync(void*, size_t, int);
194 }
195 else version(OSX)
196 {
197     const MAP_SHARED    = 0x0001;
198     const MAP_PRIVATE   = 0x0002;
199     const MAP_FIXED     = 0x0010;
200     const MAP_ANON      = 0x1000; // non-standard
201 
202     const MAP_FAILED    = cast(void*)-1;
203 
204     const MS_ASYNC      = 0x0001;
205     const MS_INVALIDATE = 0x0002;
206     const MS_SYNC       = 0x0010;
207 
208     int msync(void*, size_t, int);
209 }
210 else version( FreeBSD )
211 {
212     const MAP_SHARED    = 0x0001;
213     const MAP_PRIVATE   = 0x0002;
214     const MAP_FIXED     = 0x0010;
215     const MAP_ANON      = 0x1000; // non-standard
216 
217     const MAP_FAILED    = cast(void*)-1;
218 
219     const MS_SYNC       = 0x0000;
220     const MS_ASYNC      = 0x0001;
221     const MS_INVALIDATE = 0x0002;
222 
223     int msync(void*, size_t, int);
224 }
225 version( solaris )
226 {
227     const MAP_SHARED    = 0x001;
228     const MAP_PRIVATE   = 0x002;
229     const MAP_FIXED     = 0x010;
230     const MAP_ANON      = 0x100;
231 
232     const MAP_FAILED    = cast(void*) -1;
233 
234     enum
235     {
236         MS_ASYNC        = 0x1,
237         MS_SYNC         = 0x4,
238         MS_INVALIDATE   = 0x2
239     }
240 
241     int msync(void*, size_t, int);
242 }
243 
244 //
245 // Process Memory Locking (ML)
246 //
247 /*
248 MCL_CURRENT
249 MCL_FUTURE
250 
251 int mlockall(int);
252 int munlockall();
253 */
254 
255 version( linux )
256 {
257     const MCL_CURRENT   = 1;
258     const MCL_FUTURE    = 2;
259 
260     int mlockall(int);
261     int munlockall();
262 
263 }
264 else version(OSX)
265 {
266     const MCL_CURRENT   = 0x0001;
267     const MCL_FUTURE    = 0x0002;
268 
269     int mlockall(int);
270     int munlockall();
271 }
272 else version( FreeBSD )
273 {
274     const MCL_CURRENT   = 0x0001;
275     const MCL_FUTURE    = 0x0002;
276 
277     int mlockall(int);
278     int munlockall();
279 }
280 else version( solaris )
281 {
282 	const MCL_CURRENT   = 0x0001;
283     const MCL_FUTURE    = 0x0002;
284 
285     int mlockall(int);
286     int munlockall();
287 }
288 
289 //
290 // Range Memory Locking (MLR)
291 //
292 /*
293 int mlock(in void*, size_t);
294 int munlock(in void*, size_t);
295 */
296 
297 version( linux )
298 {
299     int mlock(in void*, size_t);
300     int munlock(in void*, size_t);
301 }
302 else version(OSX)
303 {
304     int mlock(in void*, size_t);
305     int munlock(in void*, size_t);
306 }
307 else version( FreeBSD )
308 {
309     int mlock(in void*, size_t);
310     int munlock(in void*, size_t);
311 }
312 else version( solaris )
313 {
314     int mlock(in void*, size_t);
315     int munlock(in void*, size_t);
316 }
317 
318 //
319 // Memory Protection (MPR)
320 //
321 /*
322 int mprotect(void*, size_t, int);
323 */
324 
325 version( linux )
326 {
327     int mprotect(void*, size_t, int);
328 }
329 else version(OSX)
330 {
331     int mprotect(void*, size_t, int);
332 }
333 else version( FreeBSD )
334 {
335     int mprotect(void*, size_t, int);
336 }
337 else version( solaris )
338 {
339     int mprotect(void*, size_t, int);
340 }
341 
342 //
343 // Shared Memory Objects (SHM)
344 //
345 /*
346 int shm_open(in char*, int, mode_t);
347 int shm_unlink(in char*);
348 */
349 
350 version( linux )
351 {
352     int shm_open(in char*, int, mode_t);
353     int shm_unlink(in char*);
354 }
355 else version(OSX)
356 {
357     int shm_open(in char*, int, mode_t);
358     int shm_unlink(in char*);
359 }
360 else version( FreeBSD )
361 {
362     int shm_open(in char*, int, mode_t);
363     int shm_unlink(in char*);
364 }
365 else version( solaris )
366 {
367     int shm_open(in char*, int, mode_t);
368     int shm_unlink(in char*);
369 }
370 
371 //
372 // Typed Memory Objects (TYM)
373 //
374 /*
375 POSIX_TYPED_MEM_ALLOCATE
376 POSIX_TYPED_MEM_ALLOCATE_CONTIG
377 POSIX_TYPED_MEM_MAP_ALLOCATABLE
378 
379 struct posix_typed_mem_info
380 {
381     size_t posix_tmi_length;
382 }
383 
384 int posix_mem_offset(in void*, size_t, off_t *, size_t *, int *);
385 int posix_typed_mem_get_info(int, struct posix_typed_mem_info *);
386 int posix_typed_mem_open(in char*, int, int);
387 */