Casos de uso:
Você pode usar o nome do programa para alterar o comportamento do programa .
Por exemplo, você pode criar alguns links simbólicos para o binário real.
Um exemplo famoso de onde essa técnica é usada é o projeto busybox, que instala apenas um único binário e muitos links simbólicos. (LS, CP, MV, etc). Eles estão fazendo isso para economizar espaço de armazenamento porque seus destinos são pequenos dispositivos incorporados.
Isso também é usado no 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
Aqui eles estão usando essa técnica basicamente para evitar muitos arquivos de origem duplicados ou apenas para manter as fontes mais legíveis.
Outro caso de uso seria um programa que precisa carregar alguns módulos ou dados em tempo de execução. Ter o caminho do programa permite carregar módulos a partir de um caminho relativo ao local do programa .
Além disso, muitos programas imprimem mensagens de erro, incluindo o nome do programa .
Porquê :
- Porque é a convenção POSIX (
man 3p execve
):
argv é uma matriz de sequências de argumentos passadas para o novo programa. Por convenção, a primeira dessas seqüências deve conter o nome do arquivo associado ao arquivo que está sendo executado.
- É padrão C (pelo menos C99 e C11):
Se o valor de argc for maior que zero, a string apontada por argv [0] representa o nome do programa; argv [0] [0] deve ser o caractere nulo se o nome do programa não estiver disponível no ambiente host.
Observe que o padrão C indica "nome do programa" e não "nome do arquivo".