open(2) System Calls Manual open(2) open openat creat - (libc -lc) #include int open(const char *, int , ... /* mode_t */ ); int creat(const char *, mode_t ); int openat(int _, const char *, int , ... /* mode_t */ ); /* openat2(2): */ int openat2(int _, const char *, const struct open_how *, size_t ); glibc ( feature_test_macros(7)): openat(): glibc 2.10: _POSIX_C_SOURCE >= 200809L glibc 2.10: _ATFILE_SOURCE open() . ( O_CREAT ) open(). open() . (read(2) write(2) lseek(2) fcntl(2) ) . . execve(2) ( FD_CLOEXEC fcntl(2) ) O_CLOEXEC . ( lseek(2)). open() . ( ). . (NOTES). : O_RDONLY O_WRONLY O_RDWR. . OR . O_CLOEXEC O_CREAT O_DIRECTORY O_EXCL O_NOCTTY O_NOFOLLOW O_TMPFILE O_TRUNC. . / . ( ) fcntl(2) . : O_APPEND . write(2) lseek(2). . O_APPEND NFS . NFS . O_ASYNC / : (SIGIO fcntl(2)) . ( 2.6) FIFOs. fcntl(2) . (BUGS) . O_CLOEXEC ( 2.6.23) -- (close-on-exec) . fcntl(2) F_SETFD FD_CLOEXEC. fcntl(2) F_SETFD FD_CLOEXEC -- fcntl(2) fork(2) execve(2). open() fork(2). ( -- O_CLOEXEC ). O_CREAT . ( ) . ( ) ( System V) ( BSD). set-group-ID : BSD System V. bsdgroups sysvgroups mount(8). . O_CREAT O_TMPFILE ( 0 ). O_CREAT O_TMPFILE . umask : ACL ( & ~umask). open() . : S_IRWXU 00700 ( ) S_IRUSR 00400 S_IWUSR 00200 S_IXUSR 00100 S_IRWXG 00070 S_IRGRP 00040 S_IWGRP 00020 S_IXGRP 00010 S_IRWXO 00007 S_IROTH 00004 S_IWOTH 00002 S_IXOTH 00001 POSIX . : S_ISUID 0004000 set-user-ID S_ISGID 0002000 set-group-ID ( inode(7)). S_ISVTX 0001000 (sticky bit) ( inode(7)). O_DIRECT ( 2.4.10) / . . / / . O_DIRECT O_SYNC . / O_SYNC O_DIRECT. (NOTES) . ( ) raw(8). O_DIRECTORY open(). 2.1.126 opendir(3) FIFO . O_DSYNC / . write(2) ( ) ( write(2) fdatasync(2)). (VERSIONS). O_EXCL : O_CREAT open() EEXIST. : open() . O_EXCL O_CREAT. : 2.6 O_EXCL O_CREAT . ( ) open() EBUSY. NFS O_EXCL NFSv3 2.6 . NFS O_EXCL . NFS O_EXCL ( ) link(2) . link(2) 0 . stat(2) 2 . O_LARGEFILE (LFS) off_t ( off64_t). _LARGEFILE64_SOURCE ( ) . _FILE_OFFSET_BITS 64 ( O_LARGEFILE) 32 ( feature_test_macros(7)). O_NOATIME ( 2.6.8) (st_atime inode) read(2). : o . o CAP_FOWNER (mapping) . . . NFS . O_NOCTTY -- tty(4)-- . O_NOFOLLOW ( ) ELOOP. . ( ELOOP ). FreeBSD 2.1.126 POSIX.1-2008. O_PATH . O_NONBLOCK O_NDELAY (nonblocking) . open() / . poll(2) select(2) epoll(7) "" / O_NONBLOCK (block). / ( ) O_NONBLOCK. O_NONBLOCK . (FIFOs) fifo(7). O_NONBLOCK fcntl(2). O_PATH ( 2.6.39) : . ( read(2) write(2) fchmod(2) fchown(2) fgetxattr(2) ioctl(2) mmap(2)) EBADF. : o close(2). o fchdir(2) ( 3.5). o fstat(2) ( 3.6). o fstatfs(2) ( 3.12). o (dup(2) fcntl(2) F_DUPFD ). o (fcntl(2) F_GETFD F_SETFD). o fcntl(2) F_GETFL: O_PATH. o dirfd openat() "*at()". linkat(2) AT_EMPTY_PATH ( procfs AT_SYMLINK_FOLLOW) . o ( SCM_RIGHTS unix(7)). O_PATH flags O_CLOEXEC O_DIRECTORY O_NOFOLLOW. O_PATH ( ). ( fchdir(2) ). O_RDONLY ( fchdir(2) fstat(2)) . path O_NOFOLLOW . dirfd fchownat(2) fstatat(2) linkat(2) readlinkat(2) . path . fstatfs(2) (.f_type == AUTOFS_SUPER_MAGIC). O_PATH O_EXEC POSIX.1. : char buf[PATH_MAX]; fd = open("some_prog", O_PATH); snprintf(buf, PATH_MAX, "/proc/self/fd/%d", fd); execl(buf, "some_prog", (char *) NULL); O_PATH fexecve(3). O_SYNC / ( / O_DSYNC.) write(2) ( ) ( write(2) fsync(2)). VERSIONS. O_TMPFILE ( 3.11) . path (inode) . . O_TMPFILE O_RDWR O_WRONLY O_EXCL . O_EXCL linkat(2) : char path[PATH_MAX]; fd = open("/path/to/dir", O_TMPFILE | O_RDWR, S_IRUSR | S_IWUSR); /* / 'fd'... */ linkat(fd, "", AT_FDCWD, "/path/for/file", AT_EMPTY_PATH); /* CAP_DAC_READ_SEARCH ( AT_EMPTY_PATH linkat(2)) proc(5) linkat(2) : snprintf(path, PATH_MAX, "/proc/self/fd/%d", fd); linkat(AT_FDCWD, path, AT_FDCWD, "/path/for/file", AT_SYMLINK_FOLLOW); */ open() mode O_CREAT. O_EXCL O_TMPFILE . ( O_EXCL O_EXCL ). O_TMPFILE: o tmpfile(3) : (race-free) : (1) (2) (3) (4) . o (fchown(2) fchmod(2) fsetxattr(2) ) ( linkat(2) ). O_TMPFILE . ext2 ext3 ext4 UDF Minix tmpfs. : XFS ( 3.15) Btrfs ( 3.16) F2FS ( 3.16) ubifs ( 4.9) O_TRUNC ( O_RDWR O_WRONLY) 0. FIFO O_TRUNC. O_TRUNC . creat() creat() open() flags O_CREAT|O_WRONLY|O_TRUNC. openat() openat() open() . dirfd path : o path dirfd. o path dirfd AT_FDCWD path ( open()). o path dirfd ( open() ). dirfd (O_RDONLY) O_PATH. path dirfd (EBADF). ( dirfd path ). openat2(2) openat2(2) openat() openat(). openat2(2). open() openat() creat() ( ). -1 errno . open() openat() creat() : EACCES path . ( path_resolution(7).) EACCES O_CREAT protected_fifos protected_regular sysctl FIFO (sticky). /proc/sys/fs/protected_fifos /proc/sys/fs/protected_regular proc_sys_fs(5). EBADF (openat()) path dirfd AT_FDCWD . EBUSY O_EXCL flags path ( ). EDQUOT O_CREAT (quota) (inodes) . EEXIST path O_CREAT O_EXCL. EFAULT path . EFBIG EOVERFLOW. EINTR ( FIFO fifo(7)) signal(7). EINVAL O_DIRECT. NOTES . EINVAL flags. EINVAL O_TMPFILE flags O_WRONLY O_RDWR. EINVAL O_CREAT O_DIRECTORY flags 6.4 . ( POSIX ). EINVAL O_CREAT flags ("basename") path ( ). EINVAL ("basename") path ( ). EISDIR path ( O_WRONLY O_RDWR). EISDIR path O_TMPFILE O_WRONLY O_RDWR flags O_TMPFILE. ELOOP path. ELOOP path flags O_NOFOLLOW O_PATH. EMFILE ( RLIMIT_NOFILE getrlimit(2)). ENAMETOOLONG path . ENFILE . ENODEV path . ( ENXIO). ENOENT O_CREAT . ENOENT path . ENOENT path O_TMPFILE O_WRONLY O_RDWR flags O_TMPFILE. ENOMEM FIFO FIFO pipe(7). ENOMEM . ENOSPC path path . ENOTDIR path O_DIRECTORY path . ENOTDIR (openat()) path dirfd . ENXIO O_NONBLOCK | O_WRONLY FIFO FIFO . ENXIO . ENXIO UNIX. EOPNOTSUPP path O_TMPFILE. EOVERFLOW path . 32 -D_FILE_OFFSET_BITS=64 (1<<31)-1 O_LARGEFILE . POSIX.1 2.6.24 EFBIG . EPERM O_NOATIME . EPERM fcntl(2). EROFS path . ETXTBSY path . ETXTBSY path O_TRUNC. ETXTBSY path ( / ) . EWOULDBLOCK O_NONBLOCK ( fcntl(2)). ( ) O_RDONLY | O_TRUNC . . / "/ " POSIX.1-2008 / open() O_SYNC O_DSYNC O_RSYNC . O_SYNC . O_SYNC O_DSYNC O_RSYNC. glibc O_RSYNC O_SYNC. ( O_RSYNC HP PA-RISC .) O_SYNC / . O_DSYNC / . . : (st_mtime) . . . O_DSYNC ( O_SYNC ). 2.6.33 O_SYNC open(). / ( O_SYNC O_DSYNC). 2.6.33 O_SYNC . O_DSYNC O_SYNC O_SYNC () O_DSYNC. O_DSYNC 2.6.33. C glibc 2.26 glibc open() openat() open() . glibc 2.26. POSIX POSIX.1-2024 O_CLOFORK . open() creat() openat() POSIX.1-2024. openat2(2) . O_DIRECT O_NOATIME O_PATH O_TMPFILE . open() creat() SVr4 4.3BSD POSIX.1-2001. openat() POSIX.1-2008. 2.6.16 glibc 2.4. O_CLOEXEC O_DIRECTORY O_NOFOLLOW POSIX.1-2008. O_NONBLOCK . ioctl(2). open() creat() mknod(2) . st_atime st_ctime st_mtime ( stat(2)) st_ctime st_mtime . O_TRUNC st_ctime st_mtime . /proc/pid/fd pid. /proc/pid/fdinfo . proc(5) . O_ASYNC FASYNC ( BSD) . POSIX . " " " " " " -- -- struct file. ( dup(2) ) . : fork(2) . open() (inode). KCMP_FILE kcmp(2) ( ) . NFS NFS O_SYNC O_NDELAY. NFS UID open() read(2) EACCES. open() UID . FIFOs FIFO ( ). fifo(7) . flags access mode O_RDONLY O_WRONLY O_RDWR . flags 0 1 2. O_RDONLY | O_WRONLY O_RDWR. 3 ( 11) flags : . ioctl(2) . openat() openat() ( execveat(2) faccessat(2) fanotify_mark(2) fchmodat(2) fchownat(2) fspick(2) fstatat(2) futimesat(2) linkat(2) mkdirat(2) mknodat(2) mount_setattr(2) move_mount(2) name_to_handle_at(2) open_tree(2) openat2(2) readlinkat(2) renameat(2) renameat2(2) statx(2) symlinkat(2) unlinkat(2) utimensat(2) mkfifoat(3) scandirat(3)) . openat() . openat() open() . open() open(). dir1/dir2/xxx.dep dir1/dir2/xxx . dir1 dir2 ( ) . dirfd () fstatat(2) openat(). dirfd : o o . openat() " " () . ( /proc/self/fd/dirfd ). dirfd open() openat() ( O_RDONLY O_PATH). dirfd(3) opendir(3). dirfd AT_FDCWD . flags . O_DIRECT O_DIRECT /. . / O_DIRECT EINVAL / (buffered). 6.1 O_DIRECT statx(2) STATX_DIOALIGN. STATX_DIOALIGN statx(2). O_DIRECT XFS_IOC_DIOINFO xfsctl(3). STATX_DIOALIGN . / () . 2.4 / ( 4096 ). 2.6.0 ( 512 ). ioctl(2) BLKSSZGET : blockdev --getss / O_DIRECT fork(2) ( mmap(2) MAP_PRIVATE ). / / fork(2). . / O_DIRECT shmat(2) mmap(2) MAP_SHARED. MADV_DONTFORK madvise(2) fork(2). O_DIRECT SGI IRIX 2.4. IRIX fcntl(2) . FreeBSD 4.x . O_DIRECT 2.4.10. . open() EINVAL . O_DIRECT / . / . mmap(2) / . O_DIRECT NFS . . NFS / O_DIRECT /. / O_DIRECT. / . / . Linux NFS / O_DIRECT. O_DIRECT . O_DIRECT . / O_ASYNC open() fcntl(2) . EISDIR ENOENT O_TMPFILE. chmod(2), chown(2), close(2), dup(2), fcntl(2), link(2), lseek(2), mknod(2), mmap(2), mount(2), open_by_handle_at(2), openat2(2), read(2), socket(2), stat(2), umask(2), unlink(2), write(2), fopen(3), acl(5), fifo(7), inode(7), path_resolution(7), symlink(7) 3 . . : . 6.18 8 2026 open(2)