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.fcntl;
17 private import core.sys.posix.config;
18 private import core.stdc.stdint;
19 public import core.sys.posix.sys.types; // for off_t, mode_t
20 public import core.sys.posix.sys.stat; // for S_IFMT, etc.
28 else version (WatchOS)
83 int creat(in char*, mode_t);
84 int fcntl(int, int, ...);
85 int open(in char*, int, ...);
87 version (CRuntime_Glibc)
96 static assert(off_t.sizeof == 8);
101 else version (AArch64)
108 static if ( __USE_FILE_OFFSET64 )
131 enum O_CREAT = 0x40; // octal 0100
132 enum O_EXCL = 0x80; // octal 0200
133 enum O_NOCTTY = 0x100; // octal 0400
134 enum O_TRUNC = 0x200; // octal 01000
136 enum O_APPEND = 0x400; // octal 02000
137 enum O_NONBLOCK = 0x800; // octal 04000
138 enum O_SYNC = 0x101000; // octal 04010000
139 enum O_DSYNC = 0x1000; // octal 010000
140 enum O_RSYNC = O_SYNC;
142 else version (X86_64)
144 enum O_CREAT = 0x40; // octal 0100
145 enum O_EXCL = 0x80; // octal 0200
146 enum O_NOCTTY = 0x100; // octal 0400
147 enum O_TRUNC = 0x200; // octal 01000
149 enum O_APPEND = 0x400; // octal 02000
150 enum O_NONBLOCK = 0x800; // octal 04000
151 enum O_SYNC = 0x101000; // octal 04010000
152 enum O_DSYNC = 0x1000; // octal 010000
153 enum O_RSYNC = O_SYNC;
155 else version (MIPS32)
157 enum O_CREAT = 0x0100;
158 enum O_EXCL = 0x0400;
159 enum O_NOCTTY = 0x0800;
160 enum O_TRUNC = 0x0200;
162 enum O_APPEND = 0x0008;
163 enum O_DSYNC = O_SYNC;
164 enum O_NONBLOCK = 0x0080;
165 enum O_RSYNC = O_SYNC;
166 enum O_SYNC = 0x0010;
168 else version (MIPS64)
170 enum O_CREAT = 0x0100;
171 enum O_EXCL = 0x0400;
172 enum O_NOCTTY = 0x0800;
173 enum O_TRUNC = 0x0200;
175 enum O_APPEND = 0x0008;
176 enum O_DSYNC = 0x0010;
177 enum O_NONBLOCK = 0x0080;
178 enum O_RSYNC = O_SYNC;
179 enum O_SYNC = 0x4010;
183 enum O_CREAT = 0x40; // octal 0100
184 enum O_EXCL = 0x80; // octal 0200
185 enum O_NOCTTY = 0x100; // octal 0400
186 enum O_TRUNC = 0x200; // octal 01000
188 enum O_APPEND = 0x400; // octal 02000
189 enum O_NONBLOCK = 0x800; // octal 04000
190 enum O_SYNC = 0x101000; // octal 04010000
191 enum O_DSYNC = 0x1000; // octal 010000
192 enum O_RSYNC = O_SYNC;
196 enum O_CREAT = 0x40; // octal 0100
197 enum O_EXCL = 0x80; // octal 0200
198 enum O_NOCTTY = 0x100; // octal 0400
199 enum O_TRUNC = 0x200; // octal 01000
201 enum O_APPEND = 0x400; // octal 02000
202 enum O_NONBLOCK = 0x800; // octal 04000
203 enum O_SYNC = 0x101000; // octal 04010000
204 enum O_DSYNC = 0x1000; // octal 010000
205 enum O_RSYNC = O_SYNC;
209 enum O_CREAT = 0x40; // octal 0100
210 enum O_EXCL = 0x80; // octal 0200
211 enum O_NOCTTY = 0x100; // octal 0400
212 enum O_TRUNC = 0x200; // octal 01000
214 enum O_APPEND = 0x400; // octal 02000
215 enum O_NONBLOCK = 0x800; // octal 04000
216 enum O_SYNC = 0x101000; // octal 04010000
217 enum O_DSYNC = 0x1000; // octal 010000
218 enum O_RSYNC = O_SYNC;
220 else version (AArch64)
222 enum O_CREAT = 0x40; // octal 0100
223 enum O_EXCL = 0x80; // octal 0200
224 enum O_NOCTTY = 0x100; // octal 0400
225 enum O_TRUNC = 0x200; // octal 01000
227 enum O_APPEND = 0x400; // octal 02000
228 enum O_NONBLOCK = 0x800; // octal 04000
229 enum O_SYNC = 0x101000; // octal 04010000
230 enum O_DSYNC = 0x1000; // octal 010000
231 enum O_RSYNC = O_SYNC;
233 else version (SPARC64)
235 enum O_CREAT = 0x200;
237 enum O_NOCTTY = 0x8000;
238 enum O_TRUNC = 0x400;
241 enum O_NONBLOCK = 0x4000;
242 enum O_SYNC = 0x802000;
243 enum O_DSYNC = 0x2000;
244 enum O_RSYNC = O_SYNC;
246 else version (SystemZ)
248 enum O_CREAT = 0x40; // octal 0100
249 enum O_EXCL = 0x80; // octal 0200
250 enum O_NOCTTY = 0x100; // octal 0400
251 enum O_TRUNC = 0x200; // octal 01000
253 enum O_APPEND = 0x400; // octal 02000
254 enum O_NONBLOCK = 0x800; // octal 04000
255 enum O_SYNC = 0x101000; // octal 04010000
256 enum O_DSYNC = 0x1000; // octal 010000
257 enum O_RSYNC = O_SYNC;
260 static assert(0, "unimplemented");
262 enum O_ACCMODE = 0x3;
276 static if ( __USE_FILE_OFFSET64 )
278 int creat64(in char*, mode_t);
281 int open64(in char*, int, ...);
286 int creat(in char*, mode_t);
287 int open(in char*, int, ...);
290 enum AT_SYMLINK_NOFOLLOW = 0x100;
291 enum AT_FDCWD = -100;
293 else version (Darwin)
312 enum O_CREAT = 0x0200;
313 enum O_EXCL = 0x0800;
315 enum O_TRUNC = 0x0400;
317 enum O_RDONLY = 0x0000;
318 enum O_WRONLY = 0x0001;
319 enum O_RDWR = 0x0002;
320 enum O_ACCMODE = 0x0003;
322 enum O_NONBLOCK = 0x0004;
323 enum O_APPEND = 0x0008;
324 enum O_SYNC = 0x0080;
337 int creat(in char*, mode_t);
338 int open(in char*, int, ...);
340 else version (FreeBSD)
363 enum O_CREAT = 0x0200;
364 enum O_EXCL = 0x0800;
365 enum O_NOCTTY = 0x8000;
366 enum O_TRUNC = 0x0400;
368 enum O_RDONLY = 0x0000;
369 enum O_WRONLY = 0x0001;
370 enum O_RDWR = 0x0002;
371 enum O_ACCMODE = 0x0003;
373 enum O_NONBLOCK = 0x0004;
374 enum O_APPEND = 0x0008;
375 enum O_SYNC = 0x0080;
398 int creat(in char*, mode_t);
399 int open(in char*, int, ...);
401 enum AT_SYMLINK_NOFOLLOW = 0x200;
402 enum AT_FDCWD = -100;
404 else version (OpenBSD)
416 enum F_DUPFD_CLOEXEC= 10;
425 enum O_CREAT = 0x0200;
426 enum O_EXCL = 0x0800;
427 enum O_NOCTTY = 0x8000;
428 enum O_TRUNC = 0x0400;
430 enum O_RDONLY = 0x0000;
431 enum O_WRONLY = 0x0001;
432 enum O_RDWR = 0x0002;
433 enum O_ACCMODE = 0x0003;
434 enum O_SHLOCK = 0x0010;
435 enum O_EXLOCK = 0x0020;
436 enum O_ASYNC = 0x0040;
437 enum O_FSYNC = 0x0080;
438 enum O_NOFOLLOW = 0x0100;
440 enum O_NONBLOCK = 0x0004;
441 enum O_APPEND = 0x0008;
442 enum O_SYNC = 0x0080;
443 enum O_DSYNC = O_SYNC;
444 enum O_RSYNC = O_SYNC;
446 enum O_CLOEXEC = 0x10000;
447 enum O_DIRECTORY = 0x20000;
463 int creat(in char*, mode_t);
464 int open(in char*, int, ...);
466 enum AT_FDCWD = -100;
468 enum AT_EACCESS = 0x01;
469 enum AT_SYMLINK_NOFOLLOW = 0x02;
470 enum AT_SYMLINK_FOLLOW = 0x04;
471 enum AT_REMOVEDIR = 0x08;
473 else version (NetBSD)
487 enum F_DUPFD_CLOEXEC= 12;
488 enum F_GETNOSIGPIPE = 13;
489 enum F_SETNOSIGPIPE = 14;
497 enum O_CREAT = 0x0200;
498 enum O_EXCL = 0x0800;
499 enum O_NOCTTY = 0x8000;
500 enum O_TRUNC = 0x0400;
502 enum O_RDONLY = 0x0000;
503 enum O_WRONLY = 0x0001;
504 enum O_RDWR = 0x0002;
505 enum O_ACCMODE = 0x0003;
507 enum O_NONBLOCK = 0x0004;
508 enum O_APPEND = 0x0008;
509 enum O_SYNC = 0x0080;
523 int creat(in char*, mode_t);
524 int open(in char*, int, ...);
526 else version (DragonFlyBSD)
528 enum O_RDONLY = 0x0000;
529 enum O_WRONLY = 0x0001;
530 enum O_RDWR = 0x0002;
531 enum O_ACCMODE = 0x0003;
534 enum FWRITE = 0x0002;
535 enum O_NONBLOCK = 0x0000004;
536 enum O_APPEND = 0x0000008;
537 enum O_SHLOCK = 0x0000010;
538 enum O_EXLOCK = 0x0000020;
539 enum O_ASYNC = 0x0000040;
540 enum O_FSYNC = 0x0000080;
541 enum O_SYNC = 0x0000080;
542 enum O_NOFOLLOW = 0x0000100;
543 enum O_CREAT = 0x0000200;
544 enum O_TRUNC = 0x0000400;
545 enum O_EXCL = 0x0000800;
546 enum O_NOCTTY = 0x0008000;
547 enum O_DIRECT = 0x0010000;
548 enum O_CLOEXEC = 0x0020000;
549 enum O_FBLOCKING = 0x0040000;
550 enum O_FNONBLOCKING = 0x0080000;
551 enum O_FAPPEND = 0x0100000;
552 enum O_FOFFSET = 0x0200000;
553 enum O_FSYNCWRITE = 0x0400000;
554 enum O_FASYNCWRITE = 0x0800000;
555 enum O_DIRECTORY = 0x8000000;
557 enum FAPPEND = O_APPEND;
558 enum FASYNC = O_ASYNC;
559 enum FFSYNC = O_FSYNC;
560 enum FNONBLOCK = O_NONBLOCK;
561 enum FNDELAY = O_NONBLOCK;
562 enum O_NDELAY = O_NONBLOCK;
563 enum FPOSIXSHM = O_NOFOLLOW;
565 enum FCNTLFLAGS = (FAPPEND|FASYNC|FFSYNC|FNONBLOCK|FPOSIXSHM|O_DIRECT);
578 enum F_OGETLK = F_GETLK;
579 enum F_OSETLK = F_SETLK;
580 enum F_OSETLKW = F_SETLKW;
584 //enum F_SETLKW = 13;
585 enum F_DUPFD_CLOEXEC = 17;
586 enum F_DUP2FD_CLOEXEC = 18;
608 alias oflock = flock;
610 int creat(in char*, mode_t);
611 int open(in char*, int, ...);
612 //int fcntl(int, int, ...); /*defined below*/
613 //int flock(int, int);
615 else version (Solaris)
631 static if (__USE_FILE_OFFSET64)
655 enum O_CREAT = 0x0100;
656 enum O_EXCL = 0x0400;
657 enum O_NOCTTY = 0x0800;
658 enum O_TRUNC = 0x0200;
660 enum O_APPEND = 0x0008;
661 enum O_NONBLOCK = 0x0080;
662 enum O_SYNC = 0x0010;
663 enum O_DSYNC = 0x0040;
664 enum O_RSYNC = 0x8000;
666 enum O_ACCMODE = (O_SEARCH | O_EXEC | 0x3);
670 enum O_SEARCH = 0x200000;
671 enum O_EXEC = 0x400000;
684 static if (__USE_LARGEFILE64)
700 int creat(in char*, mode_t);
701 int open(in char*, int, ...);
703 static if (__USE_LARGEFILE64)
711 static if (__USE_LARGEFILE64)
713 int creat64(in char*, mode_t);
716 int open64(in char*, int, ...);
721 int creat(in char*, mode_t);
722 int open(in char*, int, ...);
726 else version (CRuntime_Bionic)
728 // All these except for the two functions open and creat really come from
729 // the linux kernel and can probably be merged.
749 enum O_CREAT = 0x40; // octal 0100
750 enum O_EXCL = 0x80; // octal 0200
751 enum O_NOCTTY = 0x100; // octal 0400
752 enum O_TRUNC = 0x200; // octal 01000
754 enum O_APPEND = 0x400; // octal 02000
755 enum O_NONBLOCK = 0x800; // octal 04000
756 enum O_SYNC = 0x1000; // octal 010000
760 enum O_CREAT = 0x40; // octal 0100
761 enum O_EXCL = 0x80; // octal 0200
762 enum O_NOCTTY = 0x100; // octal 0400
763 enum O_TRUNC = 0x200; // octal 01000
765 enum O_APPEND = 0x400; // octal 02000
766 enum O_NONBLOCK = 0x800; // octal 04000
767 enum O_SYNC = 0x1000; // octal 010000
769 else version (AArch64)
771 enum O_CREAT = 0x40; // octal 0100
772 enum O_EXCL = 0x80; // octal 0200
773 enum O_NOCTTY = 0x100; // octal 0400
774 enum O_TRUNC = 0x200; // octal 01000
776 enum O_APPEND = 0x400; // octal 02000
777 enum O_NONBLOCK = 0x800; // octal 04000
778 enum O_SYNC = 0x101000; // octal 04010000
782 static assert(false, "Architecture not supported.");
785 enum O_ACCMODE = 0x3;
799 int creat(in char*, mode_t);
800 int open(in char*, int, ...);
802 enum AT_FDCWD = -100;
804 else version (CRuntime_Musl)
807 O_CREAT = 0x40, // octal 0100
808 O_EXCL = 0x80, // octal 0200
809 O_NOCTTY = 0x100, // octal 0400
810 O_TRUNC = 0x200, // octal 01000
812 O_APPEND = 0x400, // octal 02000
813 O_NONBLOCK = 0x800, // octal 04000
814 O_DSYNC = 0x1000, // octal 010000
815 O_SYNC = 0x101000, // octal 04010000
817 O_DIRECTORY = 0x10000,
818 O_NOFOLLOW = 0x20000,
826 O_TMPFILE = 0x410000,
827 O_NDELAY = O_NONBLOCK,
831 O_ACCMODE = (03|O_SEARCH),
862 int open(in char*, int, ...);
864 enum AT_FDCWD = -100;
866 else version (CRuntime_UClibc)
880 else static if (__USE_FILE_OFFSET64)
904 enum O_CREAT = 0x40; // octal 0100
905 enum O_EXCL = 0x80; // octal 0200
906 enum O_NOCTTY = 0x100; // octal 0400
907 enum O_TRUNC = 0x200; // octal 01000
909 enum O_APPEND = 0x400; // octal 02000
910 enum O_NONBLOCK = 0x800; // octal 04000
911 enum O_SYNC = 0x1000; // octal 010000
912 enum O_NDELAY = O_NONBLOCK;
913 enum O_FSYNC = O_SYNC;
914 enum O_ASYNC = 0x2000; // octal 020000
916 else version (MIPS32)
918 enum O_CREAT = 0x0100;
919 enum O_EXCL = 0x0400;
920 enum O_NOCTTY = 0x0800;
921 enum O_TRUNC = 0x0200;
923 enum O_APPEND = 0x0008;
924 enum O_SYNC = 0x0010;
925 enum O_NONBLOCK = 0x0080;
926 enum O_NDELAY = O_NONBLOCK;
927 enum O_FSYNC = O_SYNC;
928 enum O_ASYNC = 0x1000;
932 enum O_CREAT = 0x40; // octal 0100
933 enum O_EXCL = 0x80; // octal 0200
934 enum O_NOCTTY = 0x100; // octal 0400
935 enum O_TRUNC = 0x200; // octal 01000
937 enum O_APPEND = 0x400; // octal 02000
938 enum O_NONBLOCK = 0x800; // octal 04000
939 enum O_SYNC = 0x1000; // octal 010000
940 enum O_NDELAY = O_NONBLOCK;
941 enum O_FSYNC = O_SYNC;
942 enum O_ASYNC = 0x2000; // octal 020000
945 static assert(0, "unimplemented");
947 enum O_ACCMODE = 0x3;
956 static if (__USE_FILE_OFFSET64)
969 static if ( __USE_FILE_OFFSET64 )
971 int creat64(in char*, mode_t);
974 int open64(in char*, int, ...);
979 int creat(in char*, mode_t);
980 int open(in char*, int, ...);
983 enum AT_SYMLINK_NOFOLLOW = 0x100;
984 enum AT_FDCWD = -100;
988 static assert(false, "Unsupported platform");
991 //int creat(in char*, mode_t);
992 int fcntl(int, int, ...);
993 //int open(in char*, int, ...);
995 // Generic Posix fallocate
996 int posix_fallocate(int, off_t, off_t);
999 // Advisory Information (ADV)
1003 POSIX_FADV_SEQUENTIAL
1009 int posix_fadvise(int, off_t, off_t, int);