Nota: pense à corriger les chemins hardcodés dans le code source, j'ai mis mon home parce que flemme d'aller piocher dans l'env pour un PoC.
Pierre-Elliott Bécue <[email protected]> wrote on 20/08/2026 at 11:13:35+0200: > Salut ! > > Basile STARYNKEVITCH <[email protected]> wrote on 20/08/2026 at > 10:18:30+0200: > >> Bonjour la liste, >> >> je cherche à comprendre (à travers un exemple de code en C ou C++ en >> logiciel libre existant) l'utilisation de l'appel système symlinkat(2). > > symlinkat est juste symlink quand tu veux éviter de changer de CWD avant > de faire ton appel. > > Je fais fi de la signature des fonctions pour la lisibilité > > symlink(target, linkpath) => inscrit la valeur de target (sans contrôle > autre que vérifier que c'est un path valide) dans le fichier désigné par > linkpath. linkpath peut être relatif ou absolu. S'il est relatif, c'est > par rapport au CWD. S'il est absolu… il est absolu. > > symlinkat(target, newdirfd, linkpath) => tout comme symlink. > > Si linkpath est relatif, on exécute symlink depuis le fd ouvert dans > newdir, et donc le fichier est créé relativement au newdir. S'il est > absolu, alors newdirfd est ignoré. > > >> (je peux aussi lire du Ocaml, Rust, à l'extrême rigueur python...) >> >> Celui ci prend en deuxième argument un descripteur de fichier vers un >> répertoire existant. >> >> https://man7.org/linux/man-pages/man2/symlinkat.2.html >> >> J'ai l'impression (mais puis me tromper) que celui-ci s'obtient quez ce >> descripteur de fichier doit avoir été le resultat d'un open(2) avec >> l'option O_DIRECTORY > > C'est exact. Note que si le dossier n'existe pas, il faut le créer avec > un autre syscall d'abord, et qu'un dossier existant s'ouvre toujours en > lecture seule (sous peine de prendre un E_ISDIR) > >> un petit exemple de code en C me serait très utile (sur un Linux et des >> systèmes de fichiers natifs et locaus: ext4, btrfs ou autre, pas VFAT >> ou NFS) > > Pour l'exemple: > > mkdir "${HOME}/tmp/a" -p > mkdir "${HOME}/tmp/b" -p > touch "${HOME}/tmp/c" > cd "${HOME}/tmp/a" > > Tu peux déposer et compiler le fichier en PJ avec gcc et le tester. Il > fait ce qu'il raconte.
signature.asc
Description: PGP signature

