Re: comment utiliser symlinkat(2) en programmation C

Pierre-Elliott Bécue <[email protected]>
Newsgroups gmane.linux.debian.user.french
Message-ID <[email protected]>
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 (application/pgp-signature, 853 B)
-----BEGIN PGP SIGNATURE-----

iQJDBAEBCgAtFiEE5CQeth7uIW7ehIz87iFbn7jEWwsFAmqGxb0PHHBlYkBkZWJp
YW4ub3JnAAoJEO4hW5+4xFsLysYP/3U35IwR9jqIrqldWwMxoyBG3D+pEhh1qqlE
xQ/43M/7zIqT8o6TPAJwqjxpUT5w5DaPduCZib3o6p7N2L1G9u2sd1GrdoNez105
sFn1fh+vRz4s7b8oIc6LZgV6o7r6jz0veQqZjdDaVN4/mbaTnXRK/3ECCC6aHpCf
AsU54PoxVMDEVRKIghBmkQckwpYTHK4Ifw7Hcm1LN2tEl2+VAIIhsRUWQhfHaY1q
qdYwu4HBkWSjVOsR3HBvOVSj9vefllSLlg2e4iWfaLQEBHUuV5Ukc6kyj4uvET0C
8loTSUZYDwJLOCvVjAztR38ivfLvrv15pyioGK6M2FVi+oHTKpzWjThz1y5HgL8Q
EXuZfWgzP3fb7i+6AWNPT82URcmPOzppkFxAuyBIB1JElY/naq1AG5bRpO9rSlep
ZMrtspSqQuccAT0ATo2RtphBsLTwlA2mhMF+O3/aK/Wz4LXC/RsoaHegdR3SswLy
ktjAGS2BRo+q3A6bxxnEDGqm3q6NpeF0LQX2ayX6Yaa4zVjAsRSv3rnl8ieZOLQv
NJMsXT2Lh6HxgV3kXy6dIrCwKxxPz1IEA8RAwxkXEc+0g1pdwF4/wj1/LLSh4dK2
eRq/nQpqAA6WrXfIiBAMa9eOhaEy9s/4QQg8LbTylNAFwq1TYC8gSYrAVssX4i2V
1aUVbRb3
=mFuq
-----END PGP SIGNATURE-----
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.