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.

Attachment: signature.asc
Description: PGP signature

Répondre à