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) ;flagsnon 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:faccessat2indisponible (noyau < 5.8) etflagsnon 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());