Skip to main content

openat2

Function openat2 

Source
pub fn openat2(
    dirfd: DirFd<'_>,
    path: &CStr,
    how: OpenHow,
) -> Result<OwnedFd, Errno>
Expand description

Ouvre un fichier avec contrôle de résolution de chemin avancé.

Wrappeur de openat2(2) (Linux 5.6+, numéro 437). Préféré à openat car il permet de contraindre la résolution de chemin via [OpenHow::resolve]. Retombe automatiquement sur openat si le kernel retourne ENOSYS (< Linux 5.6).

O_CLOEXEC est toujours ajouté aux flags par le wrapper — tous les FDs ouverts par Air ont CLOEXEC par défaut.

§Parameters

  • dirfd : répertoire de base pour la résolution ([DirFd::Cwd] ou un FD de répertoire).
  • path : chemin relatif à dirfd (ou absolu si dirfd est ignoré).
  • how : flags, mode et politique de résolution.

§Errors

  • EACCES : permissions insuffisantes.
  • ENOENT : chemin inexistant (sans CREAT).
  • EEXIST : fichier existant avec CREAT | EXCL.
  • EISDIR : ouverture en écriture d’un répertoire.
  • ENOTDIR : un composant du chemin n’est pas un répertoire.
  • EXDEV : violation de RESOLVE_NO_XDEV.
  • EAGAIN : violation de RESOLVE_BENEATH ou RESOLVE_NO_SYMLINKS.
  • ENFILE / EMFILE : quotas FD atteints.

§Examples

use air_sys_syscall::fs::openat2;
use air_sys_types::fs::{DirFd, OpenHow, OpenFlags, ResolveFlags};

let how = OpenHow {
    flags: OpenFlags::RDONLY,
    mode: 0,
    resolve: ResolveFlags::BENEATH | ResolveFlags::NO_SYMLINKS,
};
let fd = openat2(DirFd::Cwd, c"./config.toml", how).expect("openat2");