• [^] # Re: je suppose l'utilisation de argv[0]

    Posté par . En réponse au message histoire de fou avec une commande. Évalué à 2.

    car pour moi ça renvoie vers le même exécutable.

    non on s'est mal compris

    #include<stdio.h>
    int main(int argc, char* argv[])
    {
     printf("%s\n",argv[0]);
     return 1;
    }

    va afficher
    * toto si tu as appelé la commande via toto
    * ./toto si tu as appelé la commande via ./toto
    * /chemin/vers/toto si tu as appelé la commande via /chemin/vers/toto

    si tu as fait alias ploc=/tmp/toto puis $>ploc, cela affichera /tmp/toto, car c'est le shell qui s'occupe du remplacement
    si tu fais un lien symbolique ou non (ln -s /chemin/vers/toto tata )
    * ./tata affichera tata et ainsi de suite

    Je suppose que le programme teste le argv[0] via un strcmp, strncmp, strcasecmp ou strncasecmp, (d'où le ltrace/strace pour le repérer)

    Il me semble que la technique est utilisée par busybox pour réduire la place prise par le système; elle est aussi utilisée par les utilitaires versant (base de donnée orienté objet)

    Il ne faut pas décorner les boeufs avant d'avoir semé le vent