openat2(2) System Calls Manual openat2(2) openat2 - () (libc -lc) #include /* O_* S_* */ #include /* RESOLVE_* */ #include /* SYS_* */ #include long syscall(SYS_openat2, int dirfd, const char *path, struct open_how *how, size_t size); : glibc openat2() syscall(2). openat2() openat(2) . openat2() path. ( O_CREAT how.flags). openat(2) path dirfd ( dirfd AT_FDCWD). path dirfd ( how.resolve RESOLVE_IN_ROOT path dirfd). flags (how) . size sizeof(struct open_how). open_how how path flags mode openat(2). open_how open_how(2type). openat2() open_how . . ( " " .) open_how : flags . O_* openat(2) openat2(). openat(2) flags openat2() how.flags. mode mode openat(2). openat(2) 07777 mode openat2() how.mode 07777. openat2() how.mode how.flags O_CREAT O_TMPFILE. resolve path. ( path_resolution(7) .) ( ). resolve : RESOLVE_BENEATH dirfd. ( path). ( ). . RESOLVE_NO_MAGICLINKS . RESOLVE_IN_ROOT dirfd path. dirfd. path dirfd .. dirfd ( /.. /). path dirfd. chroot(2) () ( dirfd). chroot(2) ( ) RESOLVE_IN_ROOT . . . RESOLVE_NO_MAGICLINKS . RESOLVE_NO_MAGICLINKS . proc(5) /proc/pid/exe /proc/pid/fd/*. ( symlink(7) .) . : o ( credentials(7)) /proc/pid/fd . o /proc . RESOLVE_NO_MAGICLINKS. ( ) path how.resolve RESOLVE_NO_MAGICLINKS how.flags O_PATH O_NOFOLLOW O_PATH . RESOLVE_NO_SYMLINKS . RESOLVE_NO_MAGICLINKS. ( ) path how.resolve RESOLVE_NO_SYMLINKS how.flags O_PATH O_NOFOLLOW O_PATH . RESOLVE_NO_SYMLINKS path O_NOFOLLOW ( how.flags) path. RESOLVE_NO_SYMLINKS ( ) . -- -- openat2() . ( ) () . RESOLVE_NO_XDEV ( ). path dirfd dirfd AT_FDCWD. RESOLVE_NO_XDEV ( ) . -- -- openat2() . ( ) () . RESOLVE_CACHED ( 5.12) . / openat2() EAGAIN. . how.resolve . . -1 errno . openat2() openat(2) : E2BIG how. ( " " NOTES .) EAGAIN how.resolve RESOLVE_IN_ROOT RESOLVE_BENEATH ".." ( ). openat2(). EAGAIN RESOLVE_CACHED . RESOLVE_CACHED how.resolve. EINVAL how. EINVAL mode how.flags O_CREAT O_TMPFILE. EINVAL size struct open_how. ELOOP how.resolve RESOLVE_NO_SYMLINKS ( ). ELOOP how.resolve RESOLVE_NO_MAGICLINKS . EXDEV how.resolve RESOLVE_IN_ROOT RESOLVE_BENEATH . EXDEV how.resolve RESOLVE_NO_XDEV . . 5.6. RESOLVE_BENEATH O_BENEATH . 13 O_RESOLVE_BENEATH O_BENEATH . O_RESOLVE_BENEATH RESOLVE_BENEATH . openat2() open_how . openat2() size . ( .) sched_setattr(2) perf_event_open(2) clone3(2). usize ksize : o ksize usize how . o ksize usize . (no-op) . . o ksize usize . . -1 errno E2BIG. . struct open_how ( ) struct open_how . : struct open_how how = { .flags = O_RDWR, .resolve = RESOLVE_IN_ROOT }; memset(3) : struct open_how how; memset(&how, 0, sizeof(how)); how.flags = O_RDWR; how.resolve = RESOLVE_IN_ROOT; size ( E2BIG). openat(2), open_how(2type), path_resolution(7), symlink(7) # 3 . . : . 6.18 8 2026 openat2(2)