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, Alex Rønne Petersen
7 * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition
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
.mman
;
17 import core
.sys
.posix
.config
;
18 public import core
.sys
.posix
.sys
.types
; // for off_t, mode_t
26 else version (WatchOS
)
29 version (ARM
) version = ARM_Any
;
30 version (AArch64
) version = ARM_Any
;
31 version (HPPA
) version = HPPA_Any
;
32 version (HPPA64
) version = HPPA_Any
;
33 version (MIPS32
) version = MIPS_Any
;
34 version (MIPS64
) version = MIPS_Any
;
35 version (PPC
) version = PPC_Any
;
36 version (PPC64
) version = PPC_Any
;
37 version (RISCV32
) version = RISCV_Any
;
38 version (RISCV64
) version = RISCV_Any
;
39 version (S390
) version = IBMZ_Any
;
40 version (SPARC
) version = SPARC_Any
;
41 version (SPARC64
) version = SPARC_Any
;
42 version (SystemZ
) version = IBMZ_Any
;
43 version (X86
) version = X86_Any
;
44 version (X86_64
) version = X86_Any
;
47 extern (C
) nothrow @nogc:
50 // Advisory Information (ADV)
53 int posix_madvise(void*, size_t, int);
56 version (CRuntime_Glibc
)
58 static if (_XOPEN_SOURCE
>= 600)
60 int posix_madvise(void *__addr
, size_t __len
, int __advice
);
65 int posix_madvise(void *addr
, size_t len
, int advice
);
67 else version (FreeBSD
)
69 int posix_madvise(void *addr
, size_t len
, int advice
);
73 int posix_madvise(void *addr
, size_t len
, int advice
);
75 else version (OpenBSD
)
77 int posix_madvise(void *addr
, size_t len
, int advice
);
79 else version (DragonFlyBSD
)
81 int posix_madvise(void *addr
, size_t len
, int advice
);
83 else version (Solaris
)
86 else version (CRuntime_Bionic
)
89 else version (CRuntime_Musl
)
91 int posix_madvise(void *, size_t
, int);
93 else version (CRuntime_UClibc
)
95 int posix_madvise(void *__addr
, size_t __len
, int __advice
);
99 static assert(false, "Unsupported platform");
104 // Advisory Information and either Memory Mapped Files or Shared Memory Objects (MC1)
108 POSIX_MADV_SEQUENTIAL
117 private enum __POSIX_MADV_DONTNEED
= 6;
119 private enum __POSIX_MADV_DONTNEED
= 4;
123 POSIX_MADV_NORMAL
= 0,
124 POSIX_MADV_RANDOM
= 1,
125 POSIX_MADV_SEQUENTIAL
= 2,
126 POSIX_MADV_WILLNEED
= 3,
127 POSIX_MADV_DONTNEED
= __POSIX_MADV_DONTNEED
,
130 else version (Darwin
)
132 enum POSIX_MADV_NORMAL
= 0;
133 enum POSIX_MADV_RANDOM
= 1;
134 enum POSIX_MADV_SEQUENTIAL
= 2;
135 enum POSIX_MADV_WILLNEED
= 3;
136 enum POSIX_MADV_DONTNEED
= 4;
138 else version (FreeBSD
)
140 enum POSIX_MADV_NORMAL
= 0;
141 enum POSIX_MADV_RANDOM
= 1;
142 enum POSIX_MADV_SEQUENTIAL
= 2;
143 enum POSIX_MADV_WILLNEED
= 3;
144 enum POSIX_MADV_DONTNEED
= 4;
146 else version (NetBSD
)
148 enum POSIX_MADV_NORMAL
= 0;
149 enum POSIX_MADV_RANDOM
= 1;
150 enum POSIX_MADV_SEQUENTIAL
= 2;
151 enum POSIX_MADV_WILLNEED
= 3;
152 enum POSIX_MADV_DONTNEED
= 4;
154 else version (OpenBSD
)
156 enum POSIX_MADV_NORMAL
= 0;
157 enum POSIX_MADV_RANDOM
= 1;
158 enum POSIX_MADV_SEQUENTIAL
= 2;
159 enum POSIX_MADV_WILLNEED
= 3;
160 enum POSIX_MADV_DONTNEED
= 4;
162 else version (DragonFlyBSD
)
164 enum POSIX_MADV_NORMAL
= 0;
165 enum POSIX_MADV_RANDOM
= 1;
166 enum POSIX_MADV_SEQUENTIAL
= 2;
167 enum POSIX_MADV_WILLNEED
= 3;
168 enum POSIX_MADV_DONTNEED
= 4;
170 else version (Solaris
)
175 static assert(false, "Unsupported platform");
179 // Memory Mapped Files, Shared Memory Objects, or Memory Protection (MC2)
190 enum PROT_NONE
= 0x0;
191 enum PROT_READ
= 0x1;
192 enum PROT_WRITE
= 0x2;
193 enum PROT_EXEC
= 0x4;
195 else version (Darwin
)
197 enum PROT_NONE
= 0x00;
198 enum PROT_READ
= 0x01;
199 enum PROT_WRITE
= 0x02;
200 enum PROT_EXEC
= 0x04;
202 else version (FreeBSD
)
204 enum PROT_NONE
= 0x00;
205 enum PROT_READ
= 0x01;
206 enum PROT_WRITE
= 0x02;
207 enum PROT_EXEC
= 0x04;
209 else version (NetBSD
)
211 enum PROT_NONE
= 0x00;
212 enum PROT_READ
= 0x01;
213 enum PROT_WRITE
= 0x02;
214 enum PROT_EXEC
= 0x04;
216 else version (OpenBSD
)
218 enum PROT_NONE
= 0x00;
219 enum PROT_READ
= 0x01;
220 enum PROT_WRITE
= 0x02;
221 enum PROT_EXEC
= 0x04;
223 else version (DragonFlyBSD
)
225 enum PROT_NONE
= 0x00;
226 enum PROT_READ
= 0x01;
227 enum PROT_WRITE
= 0x02;
228 enum PROT_EXEC
= 0x04;
230 else version (Solaris
)
232 enum PROT_NONE
= 0x00;
233 enum PROT_READ
= 0x01;
234 enum PROT_WRITE
= 0x02;
235 enum PROT_EXEC
= 0x04;
239 static assert(false, "Unsupported platform");
243 // Memory Mapped Files, Shared Memory Objects, or Typed Memory Objects (MC3)
246 void* mmap(void*, size_t, int, int, int, off_t);
247 int munmap(void*, size_t);
250 version (CRuntime_Glibc
)
252 static if (__USE_LARGEFILE64
) void* mmap64(void*, size_t
, int, int, int, off_t
);
253 static if (__USE_FILE_OFFSET64
)
256 void* mmap(void*, size_t
, int, int, int, off_t
);
257 int munmap(void*, size_t
);
259 else version (Darwin
)
261 void* mmap(void*, size_t
, int, int, int, off_t
);
262 int munmap(void*, size_t
);
264 else version (FreeBSD
)
266 void* mmap(void*, size_t
, int, int, int, off_t
);
267 int munmap(void*, size_t
);
269 else version (NetBSD
)
271 void* mmap(void*, size_t
, int, int, int, off_t
);
272 int munmap(void*, size_t
);
274 else version (OpenBSD
)
276 void* mmap(void*, size_t
, int, int, int, off_t
);
277 int munmap(void*, size_t
);
279 else version (DragonFlyBSD
)
281 void* mmap(void*, size_t
, int, int, int, off_t
);
282 int munmap(void*, size_t
);
284 else version (Solaris
)
286 void* mmap(void*, size_t
, int, int, int, off_t
);
287 int munmap(void*, size_t
);
289 else version (CRuntime_Bionic
)
291 void* mmap(void*, size_t
, int, int, int, off_t
);
292 int munmap(void*, size_t
);
294 else version (CRuntime_Musl
)
296 static if (__USE_LARGEFILE64
) void* mmap64(void*, size_t
, int, int, int, off_t
);
297 static if (__USE_FILE_OFFSET64
)
300 void* mmap(void*, size_t
, int, int, int, off_t
);
301 int munmap(void*, size_t
);
303 else version (CRuntime_UClibc
)
305 static if (__USE_LARGEFILE64
) void* mmap64(void*, size_t
, int, int, int, off_t
);
306 static if (__USE_FILE_OFFSET64
)
309 void* mmap(void*, size_t
, int, int, int, off_t
);
310 int munmap(void*, size_t
);
314 static assert(false, "Unsupported platform");
318 // Memory Mapped Files (MF)
328 MS_INVALIDATE (MF|SIO)
333 enum MAP_SHARED
= 0x01;
334 enum MAP_PRIVATE
= 0x02;
335 enum MAP_FIXED
= 0x10;
337 enum MAP_FAILED
= cast(void*) -1;
340 private enum DEFAULTS
= true;
343 private enum DEFAULTS
= false;
344 enum MAP_ANON
= 0x10;
347 enum MS_INVALIDATE
= 4;
350 private enum DEFAULTS
= true;
351 else version (ARM_Any
)
352 private enum DEFAULTS
= true;
353 else version (IBMZ_Any
)
354 private enum DEFAULTS
= true;
356 private enum DEFAULTS
= true;
357 else version (HPPA_Any
)
359 private enum DEFAULTS
= false;
360 enum MAP_ANON
= 0x10;
363 enum MS_INVALIDATE
= 4;
366 private enum DEFAULTS
= true;
368 private enum DEFAULTS
= true;
369 else version (X86_Any
)
370 private enum DEFAULTS
= true;
371 else version (MIPS_Any
)
373 private enum DEFAULTS
= false;
374 enum MAP_ANON
= 0x0800;
376 enum MS_INVALIDATE
= 2;
379 else version (RISCV_Any
)
380 private enum DEFAULTS
= true;
381 else version (SPARC_Any
)
382 private enum DEFAULTS
= true;
383 else version (PPC_Any
)
384 private enum DEFAULTS
= true;
385 else version (LoongArch64
)
386 private enum DEFAULTS
= true;
388 static assert(0, "unimplemented");
392 enum MAP_ANON
= 0x20;
394 enum MS_INVALIDATE
= 2;
398 else version (Darwin
)
400 enum MAP_SHARED
= 0x0001;
401 enum MAP_PRIVATE
= 0x0002;
402 enum MAP_FIXED
= 0x0010;
403 enum MAP_ANON
= 0x1000;
405 enum MAP_FAILED
= cast(void*)-1;
407 enum MS_ASYNC
= 0x0001;
408 enum MS_INVALIDATE
= 0x0002;
409 enum MS_SYNC
= 0x0010;
411 else version (FreeBSD
)
413 enum MAP_SHARED
= 0x0001;
414 enum MAP_PRIVATE
= 0x0002;
415 enum MAP_FIXED
= 0x0010;
416 enum MAP_ANON
= 0x1000;
418 enum MAP_FAILED
= cast(void*)-1;
420 enum MS_SYNC
= 0x0000;
421 enum MS_ASYNC
= 0x0001;
422 enum MS_INVALIDATE
= 0x0002;
424 else version (NetBSD
)
426 enum MAP_SHARED
= 0x0001;
427 enum MAP_PRIVATE
= 0x0002;
428 enum MAP_FIXED
= 0x0010;
429 enum MAP_ANON
= 0x1000;
431 enum MAP_FAILED
= cast(void*)-1;
433 enum MS_SYNC
= 0x0004;
434 enum MS_ASYNC
= 0x0001;
435 enum MS_INVALIDATE
= 0x0002;
437 else version (OpenBSD
)
439 enum MAP_SHARED
= 0x0001;
440 enum MAP_PRIVATE
= 0x0002;
441 enum MAP_FIXED
= 0x0010;
442 enum MAP_ANON
= 0x1000;
443 enum MAP_STACK
= 0x4000;
445 enum MAP_FAILED
= cast(void*)-1;
447 enum MS_SYNC
= 0x0002;
448 enum MS_ASYNC
= 0x0001;
449 enum MS_INVALIDATE
= 0x0004;
451 else version (DragonFlyBSD
)
453 enum MAP_SHARED
= 0x0001;
454 enum MAP_PRIVATE
= 0x0002;
455 enum MAP_FIXED
= 0x0010;
456 enum MAP_ANON
= 0x1000;
458 enum MAP_FAILED
= cast(void*)-1;
460 enum MS_SYNC
= 0x0000;
461 enum MS_ASYNC
= 0x0001;
462 enum MS_INVALIDATE
= 0x0002;
464 else version (Solaris
)
466 enum MAP_SHARED
= 0x0001;
467 enum MAP_PRIVATE
= 0x0002;
468 enum MAP_FIXED
= 0x0010;
469 enum MAP_ANON
= 0x0100;
471 enum MAP_FAILED
= cast(void*)-1;
473 enum MS_SYNC
= 0x0004;
474 enum MS_ASYNC
= 0x0001;
475 enum MS_INVALIDATE
= 0x0002;
479 static assert(false, "Unsupported platform");
483 int msync(void*, size_t, int); (MF|SIO)
486 version (CRuntime_Glibc
)
488 int msync(void*, size_t
, int);
490 else version (Darwin
)
492 int msync(void*, size_t
, int);
494 else version (FreeBSD
)
496 int msync(void*, size_t
, int);
498 else version (NetBSD
)
500 int __msync13(void*, size_t
, int);
501 alias msync
= __msync13
;
503 else version (OpenBSD
)
505 int msync(void*, size_t
, int);
507 else version (DragonFlyBSD
)
509 int msync(void*, size_t
, int);
511 else version (Solaris
)
513 int msync(void*, size_t
, int);
515 else version (CRuntime_Bionic
)
517 int msync(const scope void*, size_t
, int);
519 else version (CRuntime_Musl
)
521 int msync(void*, size_t
, int);
523 else version (CRuntime_UClibc
)
525 int msync(void*, size_t
, int);
529 static assert(false, "Unsupported platform");
533 // Process Memory Locking (ML)
542 version (SPARC_Any
) enum
544 MCL_CURRENT
= 0x2000,
547 else version (PPC_Any
) enum
549 MCL_CURRENT
= 0x2000,
552 else version (Alpha
) enum
563 else version (Darwin
)
565 enum MCL_CURRENT
= 0x0001;
566 enum MCL_FUTURE
= 0x0002;
568 else version (FreeBSD
)
570 enum MCL_CURRENT
= 0x0001;
571 enum MCL_FUTURE
= 0x0002;
573 else version (NetBSD
)
575 enum MCL_CURRENT
= 0x0001;
576 enum MCL_FUTURE
= 0x0002;
578 else version (OpenBSD
)
580 enum MCL_CURRENT
= 0x0001;
581 enum MCL_FUTURE
= 0x0002;
583 else version (DragonFlyBSD
)
585 enum MCL_CURRENT
= 0x0001;
586 enum MCL_FUTURE
= 0x0002;
588 else version (Solaris
)
590 enum MCL_CURRENT
= 0x0001;
591 enum MCL_FUTURE
= 0x0002;
595 static assert(false, "Unsupported platform");
603 version (CRuntime_Glibc
)
608 else version (Darwin
)
613 else version (FreeBSD
)
618 else version (NetBSD
)
623 else version (OpenBSD
)
628 else version (DragonFlyBSD
)
633 else version (Solaris
)
638 else version (CRuntime_Bionic
)
643 else version (CRuntime_Musl
)
648 else version (CRuntime_UClibc
)
655 static assert(false, "Unsupported platform");
659 // Range Memory Locking (MLR)
662 int mlock(const scope void*, size_t);
663 int munlock(const scope void*, size_t);
666 version (CRuntime_Glibc
)
668 int mlock(const scope void*, size_t
);
669 int munlock(const scope void*, size_t
);
671 else version (Darwin
)
673 int mlock(const scope void*, size_t
);
674 int munlock(const scope void*, size_t
);
676 else version (FreeBSD
)
678 int mlock(const scope void*, size_t
);
679 int munlock(const scope void*, size_t
);
681 else version (NetBSD
)
683 int mlock(const scope void*, size_t
);
684 int munlock(const scope void*, size_t
);
686 else version (OpenBSD
)
688 int mlock(const scope void*, size_t
);
689 int munlock(const scope void*, size_t
);
691 else version (DragonFlyBSD
)
693 int mlock(const scope void*, size_t
);
694 int munlock(const scope void*, size_t
);
696 else version (Solaris
)
698 int mlock(const scope void*, size_t
);
699 int munlock(const scope void*, size_t
);
701 else version (CRuntime_Bionic
)
703 int mlock(const scope void*, size_t
);
704 int munlock(const scope void*, size_t
);
706 else version (CRuntime_Musl
)
708 int mlock(const scope void*, size_t
);
709 int munlock(const scope void*, size_t
);
711 else version (CRuntime_UClibc
)
713 int mlock(const scope void*, size_t
);
714 int munlock(const scope void*, size_t
);
718 static assert(false, "Unsupported platform");
722 // Memory Protection (MPR)
725 int mprotect(void*, size_t, int);
728 version (CRuntime_Glibc
)
730 int mprotect(void*, size_t
, int);
732 else version (Darwin
)
734 int mprotect(void*, size_t
, int);
736 else version (FreeBSD
)
738 int mprotect(void*, size_t
, int);
740 else version (NetBSD
)
742 int mprotect(void*, size_t
, int);
744 else version (OpenBSD
)
746 int mprotect(void*, size_t
, int);
748 else version (DragonFlyBSD
)
750 int mprotect(void*, size_t
, int);
752 else version (Solaris
)
754 int mprotect(void*, size_t
, int);
756 else version (CRuntime_Bionic
)
758 int mprotect(const scope void*, size_t
, int);
760 else version (CRuntime_Musl
)
762 int mprotect(void*, size_t
, int);
764 else version (CRuntime_UClibc
)
766 int mprotect(void*, size_t
, int);
770 static assert(false, "Unsupported platform");
774 // Shared Memory Objects (SHM)
777 int shm_open(const scope char*, int, mode_t);
778 int shm_unlink(const scope char*);
781 version (CRuntime_Glibc
)
783 int shm_open(const scope char*, int, mode_t
);
784 int shm_unlink(const scope char*);
786 else version (Darwin
)
788 int shm_open(const scope char*, int, mode_t
);
789 int shm_unlink(const scope char*);
791 else version (FreeBSD
)
793 int shm_open(const scope char*, int, mode_t
);
794 int shm_unlink(const scope char*);
796 else version (NetBSD
)
798 int shm_open(const scope char*, int, mode_t
);
799 int shm_unlink(const scope char*);
801 else version (OpenBSD
)
803 int shm_open(const scope char*, int, mode_t
);
804 int shm_unlink(const scope char*);
806 else version (DragonFlyBSD
)
808 int shm_open(const scope char*, int, mode_t
);
809 int shm_unlink(const scope char*);
811 else version (Solaris
)
813 int shm_open(const scope char*, int, mode_t
);
814 int shm_unlink(const scope char*);
816 else version (CRuntime_Bionic
)
819 else version (CRuntime_Musl
)
821 int shm_open(const scope char*, int, mode_t
);
822 int shm_unlink(const scope char*);
824 else version (CRuntime_UClibc
)
826 int shm_open(const scope char*, int, mode_t
);
827 int shm_unlink(const scope char*);
831 static assert(false, "Unsupported platform");
835 // Typed Memory Objects (TYM)
838 POSIX_TYPED_MEM_ALLOCATE
839 POSIX_TYPED_MEM_ALLOCATE_CONTIG
840 POSIX_TYPED_MEM_MAP_ALLOCATABLE
842 struct posix_typed_mem_info
844 size_t posix_tmi_length;
847 int posix_mem_offset(const scope void*, size_t, off_t *, size_t *, int *);
848 int posix_typed_mem_get_info(int, struct posix_typed_mem_info *);
849 int posix_typed_mem_open(const scope char*, int, int);