Bonjour!
Il se trouve que j'ai un petit probleme au niveau d'une fonction execlp.
Mon programme est sense etre une replique d'un shell (C'est a dire que le prompt doit s'afficher, demander une commande puis la gerer.) et pour ce faire je stock la commande tapee dans un char etoile puis je lance une recherche dans les /bin, /sbin... ect. pour voir si cette commande existe bien puis si elle peut bien etre executee.
Ensuite, je passe tout ca en argument a ma fonction execlp si la commande existe. Cela donne:
path[save] correspond au chemin dans lequel se trouve l'executable, pars correspond a la commande tapee et pars_path est une fonction renvoyant le pwd courant.Code:execlp(path[save], pars, pars_path(env), 0);
Lorsque je lance le programme avec une commande "ls", il m'affiche bien tout ce que j'ai dans le dossier mais me kill le process directement apres (alors que j'ai un "while 42" qui est sensé l'en empêcher).
Avec gdb j'obtiens ceci en passant sur le execlp (il ne m'affiche donc pas le dossier sur le debugger):
J'ai fait quelques recherche et apparement le signal SIGTRAP seraita cause d'un "point d'arret" situe quelque part dans le programme. Quelqu'un pourrait m'en dire plus dessus?Program received signal SIGTRAP, Trace/breakpoint trap.
Cannot remove breakpoints because program is no longer writable.
It might be running in another process.
Further execution is probably impossible.
0x280519d8 in ?? () from /libexec/ld-elf.so.1
Merci!
Ps:
Voici le code:
Code:void research_for_line(char *pars, char **path, char *line, char **env) { int count; int verif; int exec; int save = -1; count = 0; while (count != 14) { path[count] = my_str_to_word_tab(pars, path[count]); verif = access(path[count], F_OK); if (verif == 0) { exec = access(path[count], X_OK); if (exec == 0) save = count; } ++count; } if (save != -1) { execlp(path[save], pars, pars_path(env), 0); my_putstr("\n"); my_putstr(pars_path(env)); my_putstr("\n"); } else my_putstr("Command not found.\n"); count = 0; }
-----