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 ».