C'est tout simplement pour que tu comprennes mieux comment fonctionne l'environnement linux. Pour executer "ls -l -a" par-exemple, il va falloir retracer toutes les etapes, a savoir :
- trouver la commande
- trouver les parametres a lui passer
- trouver l'executable de la commande
- le lancer dans un processus fils pour ne pas quitter le processus courant
Donc pour les 2 premieres etapes, un peu de parsing. Pour la 3e, il va te falloir l'environnement (commande env dans ton shell) et plus precisement la variable PATH qui contient les chemins ou sont places les libs et les executables. Donc pour avoir l'environnement de ton executable, rien de bien mechant :
int main (int argc, char *argv[], char *envp[])
C'est donc le 3e argument, dedans il te suffira donc de chercher la variable que tu souhaites. Pour chacune, concatene le nom de l'executable et le path. Par-exemple :
executable : ls
path : /usr
Donnera /usr/ls. Apres teste l'existence du fichier ainsi que la possibilite de l'executer avec la fonction access. Enfin, il te suffit de creer un processus fils dans lequel tu vas appeler une fonction la famille exec (execvp est la plus simple d'utilisation si je me souviens bien) dans laquelle tu passeras le path complet de ton executable (/usr/ls dans le cas present) ainsi que les arguments (-l et -a) dans un char** et enfin l'environnement que tu souhaites lui envoyer.
Partager