Bonjour,
dans le cadre d'un exercice, je doit réaliser un programme my_ls qui imite la fonction ls. Il est dit dans le sujet que si aucun argument n'est fourni au programme, il utilisera le répertoire courant, c'est-à-dire que:
est équivalent à
Code : Sélectionner tout - Visualiser dans une fenêtre à part ./my_lsJusque là, pas de prob, voici à quoi ressemble le début du main:
Code : Sélectionner tout - Visualiser dans une fenêtre à part ./my_ls ./
Le problème, c'est que je dois maintenant rajouter des options (par exemple -a ou -l), et que dans ce cas,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 if (argc==1) { execl(argv[0],argv[0],".",NULL); perror("execl"); return EXIT_FAILURE; }
doit être équivalent à
Code : Sélectionner tout - Visualiser dans une fenêtre à part ./my_ls -l
J'ai donc modifié le main:
Code : Sélectionner tout - Visualiser dans une fenêtre à part ./my_ls -l ./
Et je ne sais pas du tout comment rajouter à la fin de argv un nouvel argument !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 recupOptions(argc,argv); if (argv[optind]==NULL) // optind est modifié par la fonction getopt() // on doit relancer le programme avec les mêmes options, mais en rajoutant "./"
Je n'ai pas trouvé de fonction exec* qui semble correspondre à ce que je veux. J'ai pensé à remplacer le NULL de argv par ".", mais c'est le meilleur moyen d'avoir un segfault. J'ai pensé créer dynamiquement un tableau identique à argv mais avec en plus la chaine ".", mais cette solution ne me parait pas très jolie...
Merci d'avance pour votre aide
Partager