Casos de uso:
Puede usar el nombre del programa para cambiar el comportamiento del programa .
Por ejemplo, podría crear algunos enlaces simbólicos al binario real.
Un ejemplo famoso en el que se utiliza esta técnica es el proyecto busybox que instala solo un binario único y muchos enlaces simbólicos. (ls, cp, mv, etc.) Lo están haciendo para ahorrar espacio de almacenamiento porque sus objetivos son pequeños dispositivos integrados.
Esto también se usa en setarch
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
Aquí están utilizando esta técnica básicamente para evitar muchos archivos fuente duplicados o simplemente para mantener las fuentes más legibles.
Otro caso de uso sería un programa que necesita cargar algunos módulos o datos en tiempo de ejecución. Tener la ruta del programa le permite cargar módulos desde una ruta relativa a la ubicación del programa .
Además, muchos programas imprimen mensajes de error, incluido el nombre del programa .
Por qué :
- Porque es la convención POSIX (
man 3p execve
):
argv es un conjunto de cadenas de argumentos pasados al nuevo programa. Por convención, la primera de estas cadenas debe contener el nombre de archivo asociado con el archivo que se está ejecutando.
- Es estándar C (al menos C99 y C11):
Si el valor de argc es mayor que cero, la cadena a la que apunta argv [0] representa el nombre del programa; argv [0] [0] será el carácter nulo si el nombre del programa no está disponible en el entorno del host.
Tenga en cuenta que el estándar C dice "nombre del programa" no "nombre de archivo".