Cas d'utilisation:
Vous pouvez utiliser le nom du programme pour changer le comportement du programme .
Par exemple, vous pouvez créer des liens symboliques vers le binaire actuel.
Un exemple célèbre où cette technique est utilisée est le projet busybox qui n’installe qu’un seul binaire et de nombreux liens symboliques. (ls, cp, mv, etc.). Ils le font pour économiser de l'espace de stockage car leurs cibles sont de petits périphériques intégrés.
Ceci est aussi utilisé setarch
depuis util-linux:
$ ls -l /usr/bin/ | grep setarch
lrwxrwxrwx 1 root root 7 2015-11-05 02:15 i386 -> setarch
lrwxrwxrwx 1 root root 7 2015-11-05 02:15 linux32 -> setarch
lrwxrwxrwx 1 root root 7 2015-11-05 02:15 linux64 -> setarch
-rwxr-xr-x 1 root root 14680 2015-10-22 16:54 setarch
lrwxrwxrwx 1 root root 7 2015-11-05 02:15 x86_64 -> setarch
Ici, ils utilisent essentiellement cette technique pour éviter de nombreux fichiers sources en double ou pour que les sources soient toujours plus lisibles.
Un autre cas d'utilisation serait un programme devant charger certains modules ou certaines données au moment de l'exécution. Avoir le chemin du programme vous permet de charger des modules à partir d'un chemin relatif à l'emplacement du programme .
En outre, de nombreux programmes impriment des messages d'erreur, notamment le nom du programme .
Pourquoi :
- Parce que c'est la convention POSIX (
man 3p execve
):
argv est un tableau de chaînes d'arguments passées au nouveau programme. Par convention, la première de ces chaînes devrait contenir le nom de fichier associé au fichier en cours d'exécution.
- C'est la norme C (au moins C99 et C11):
Si la valeur de argc est supérieure à zéro, la chaîne pointée par argv [0] représente le nom du programme. argv [0] [0] doit être un caractère nul si le nom du programme n'est pas disponible dans l'environnement hôte.
Notez que la norme C dit "nom du programme" et non "nom de fichier".