J’écris ce billet ici, au lieu du wiki, pour qu’il ait plus de visibiliter.
Parfois dans certains projets écris en [Vala|https://wiki.gnome.org/Projects/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 ».