execl
segue o caminho do comando a ser executado, seguido pelo argumentos;
The first argument, by convention, should point to the filename associated with the file being executed.
é por isso que o primeiro argumento é "vi"
.
Você pode pensar nisso como especificando, por um lado, o caminho do comando e, separadamente, o array argv
que o programa recebe (estou simplificando um pouco aqui). Cabe ao autor da chamada especificar o que o argv[0]
do destinatário irá conter.
Os programas podem usar argv[0]
para ajustar seu comportamento; Como você viu, o Vim se comporta como o Vi se for invocado como vi
. Outro exemplo é busybox
, que implementa uma ampla variedade de comandos em um único binário.