setprogname sous Linux

Dans Unix, je sais qu’il existe des fonctions setprogname et getprogname . Les deux servent à définir et à obtenir le nom du programme respectivement. Ils se trouvent dans la bibliothèque stdilib.c . Je me demandais si Linux avait aussi ces fonctions intégrées car je ne pouvais pas les faire fonctionner sur la machine Linux (Ubuntu 10.04). Ces fonctions sont-elles disponibles? Le code est ci-dessous au cas où les pages de manuel que j’ai trouvées en ligne ne racontaient pas toute l’histoire et je n’ai pas ajouté quelque chose dont j’avais besoin. Merci!

 #define _XOPEN_SOURCE 500 #include #include #include #include #include #include #include #include int main (int argc, char *argv[]) { setprogname(argv[0]); 

Depuis la page de manuel de * BSD sur {set,get}progname :

Les fonctions getprogname () et setprogname () manipulent le nom du programme en cours. Ils sont utilisés par les routines de signalisation des erreurs pour produire une sortie cohérente.

Si vous souhaitez personnaliser le nom du programme pour un rapport d’ error avec error et error_at_line vous pouvez déclarer et définir la variable error_print_progname comme décrit dans le manuel glibc :

Comme mentionné ci-dessus, les fonctions error et error_at_line peuvent être personnalisées en définissant une variable nommée error_print_progname.

– Variable: void (*) error_print_progname (void) Si la variable error_print_progname est définie sur une valeur différente de zéro, la fonction indiquée est appelée par erreur ou error_at_line. Il est prévu d’imprimer le nom du programme ou de faire quelque chose de similaire.

La fonction est censée être imprimée sur le stream stderr et doit pouvoir gérer l’orientation du stream.

La variable est globale et partagée par tous les threads.

Edit: Je vérifie juste le manuel de gnulib à propos de {set,get}progname et error_print_progname :

Cette variable est manquante sur toutes les plates-formes non glibc: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF / 1 5.1, Solaris 11 2011-11 , Cygwin, mingw, MSVC 9, Interix 3.5, BeOS.

Vous pouvez utiliser libbsd sur GNU / Linux pour accéder à ces fonctions et à d’autres fonctions utilitaires utiles des systèmes d’exploitation * BSD.

J’ai essayé sur Ubuntu 12.04 et ça marche:

Installez le libbsd-dev . Ensuite, essayez de comstackr le code suivant:

 //filename=somec.c #include  #include  int main(int argc, char *argv[]){ if(argc>1) setprogname((char*)argv[1]); printf("Program name is: %s\n",getprogname()); return 0; 

}

En utilisant cet ensemble d’arguments:

 gcc somec.c -o somec -lbsd 

Cela fonctionne pour moi.