Casi d'uso:
È possibile utilizzare il nome del programma per modificare il comportamento del programma .
Ad esempio, è possibile creare alcuni collegamenti simbolici al binario effettivo.
Un esempio famoso in cui viene utilizzata questa tecnica è il progetto busybox che installa solo un singolo binario e molti collegamenti simbolici. (ls, cp, mv, ecc.). Lo stanno facendo per risparmiare spazio di archiviazione perché i loro target sono piccoli dispositivi integrati.
Questo è usato anche setarch
da 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
Qui stanno usando questa tecnica sostanzialmente per evitare molti file sorgente duplicati o semplicemente per mantenere le fonti più leggibili.
Un altro caso d'uso sarebbe un programma che deve caricare alcuni moduli o dati in fase di esecuzione. Avere il percorso del programma consente di caricare i moduli da un percorso relativo alla posizione del programma .
Inoltre, molti programmi stampano messaggi di errore, incluso il nome del programma .
Perché :
- Perché è la convenzione POSIX (
man 3p execve
):
argv è una matrice di stringhe di argomenti passate al nuovo programma. Per convenzione, la prima di queste stringhe dovrebbe contenere il nome file associato al file in esecuzione.
- È standard C (almeno C99 e C11):
Se il valore di argc è maggiore di zero, la stringa indicata da argv [0] rappresenta il nome del programma; argv [0] [0] deve essere il carattere null se il nome del programma non è disponibile dall'ambiente host.
Si noti che lo standard C dice "nome del programma" non "nome file".