Nous devons donc ici passer deux fois le nom du fichier dans la fonction.
Ce n'est pas tout à fait la même chose que vous remarquez en observant que l' un d'eux est utilisé comme argv[0]
valeur. Cela ne doit pas nécessairement être le même que le nom de base de l'exécutable; beaucoup / la plupart des choses l'ignorent et vous pouvez y mettre tout ce que vous voulez.
Le premier est le chemin réel vers l'exécutable, pour lequel il existe une nécessité évidente. Le second est passé au processus ostensiblement comme le nom utilisé pour l'invoquer, mais, par exemple:
execl("/bin/ls", "banana", "-l", NULL);
Fonctionnera bien, en supposant que /bin/ls
c'est le bon chemin.
Cependant, certaines applications utilisent argv[0]
. Habituellement, ceux-ci contiennent un ou plusieurs liens symboliques $PATH
; ceci est courant avec les utilitaires de compression (ils utilisent parfois des wrappers shell à la place). Si vous avez xz
installé, stat $(which xzcat)
montre que c'est un lien vers xz
, et man xzcat
est le même que celui man xz
qui explique "xzcat est équivalent à xz --decompress --stdout". La façon dont xz peut dire comment il a été invoqué est en vérifiant argv[0]
, ce qui rend ces équivalents:
execl("/bin/xz", "xzcat", "somefile.xz", NULL);
execl("/bin/xz", "xz", "--decompress", "--stdout", "somefile.xz", NULL);
busybox
peut être ce que vous voulez qu'il soit selon la façon dont vous l'appelez bien?