Skip to main content

faccessat

Function faccessat 

Source
pub fn faccessat(
    dirfd: DirFd<'_>,
    path: &CStr,
    mode: AccessMode,
    flags: AccessFlags,
) -> Result<(), Errno>
Expand description

Teste les permissions d’accès à un fichier sans l’ouvrir.

Wrappeur de faccessat(2). Attention : sujet à des races TOCTOU — préférer ouvrir directement et gérer l’erreur.

§Routage par flags (faccessat vs faccessat2)

Le syscall noyau faccessat historique ne prend que 3 arguments (dirfd, path, mode) : il ignore silencieusement tout flag comportemental. Honorer AT_SYMLINK_NOFOLLOW / AT_EACCESS exige le syscall faccessat2 (numéro 439 sur x86_64 et aarch64, Linux 5.8+, 4 arguments). Comme la glibc, ce wrapper route donc selon flags :

  • flags.is_empty()faccessat (3-arg, universellement disponible) ;
  • flags non vide → faccessat2 (4-arg, qui applique réellement les flags).

La signature publique est inchangée ; seul le syscall sous-jacent diffère. Sur un noyau < 5.8 sans faccessat2, un appel avec flags retourne ENOSYS (l’appelant n’obtient jamais un résultat où le flag aurait été ignoré).

§Errors

  • EACCES : accès refusé.
  • ENOENT : chemin inexistant.
  • ENOSYS : faccessat2 indisponible (noyau < 5.8) et flags non vide.

§Examples

use air_sys_syscall::fs::faccessat;
use air_sys_types::fs::{AccessFlags, AccessMode, DirFd};

let result = faccessat(DirFd::Cwd, c"./script.sh", AccessMode::X_OK, AccessFlags::empty());