J'écris ce billet ici, au lieu du wiki, pour qu'il ait plus de visibiliter.
Parfois dans certains projets écris en Vala on trouve ce bout de code :
[...] [CCode (cheader_filename = "sys/prctl.h", cname = "prctl")] extern int prctl (int option, string arg2, ulong arg3, ulong arg4, ulong arg5); [...]
On dénomme ce fragement par C code attribut (ou CCode attribut). Il s'agit d'une particularité de ce langage, pour utiliser directement des fonctions « externes ».
Sous Linux la fonction prctl ()
permet de nommer un processus (on peut le voir avec top
).
Sous les BSD (DragonFly, FreeBSD, NetBSD et OpenBSD) cette fonction n'existe pas. En fait elle s'appelle autrement, setproctitle ()
.
Or elle n'est pas présente au même endroit dans chacun des BSD.
Sous DragonFly et FreeBSD, on la retrouve dans unistd.h.
[...] [CCode (cheader_filename = "unistd.h", cname = "setproctitle")] extern static void setproctitle (string fmt, ...); [...]
Sous NetBSD et OpenBSD, on la retrouve dans stdlib.h.
[...] [CCode (cheader_filename = "stdlib.h", cname = "setproctitle")] extern static void setproctitle (string fmt, ...); [...]
Voilà, désormais on peut écrire du code « portable ».