Voici les seules fonctions auxquelles on a droit :
chdir, fork, stat, lstat, fstat, open, read, write, execve, access, wait, waitpid, wait3, wait4, signal, kill
En fait le pere aussi est un shell. Je vais et passer un bout de mon code pour que tu puisses mieux comprendre ce que je fais :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| void my_minishell(char **environ)
{
char *str;
char **params;
pid_t pid;
int status;
path = my_explode(":", my_get_path(environ));
my_putstr("$> ");
while ((str = my_get_next_line(0)) != NULL)
{
params = my_explode(" ", str);
if ((pid = fork()) < 0)
{
perror("fork");
exit(EXIT_FAILURE);
}
if (pid == 0)
my_exec(params, environ);
else
{
wait(&status);
my_putstr("$> ");
}
}
} |
Donc, dans un premier temps, je recupere la ligne de commande envoyee par l'utilisateur et je la traite dans le fils. Pour la plupart des commandes, je n'ai pas besoin d'intereagir avec le pere (ls, pwd, ..), mais pour d'autre si.
Lorsque qu'un utilisateur utilise la commande cd, il faut que le pere sache qu'il faut qu'il change aussi de repertoire, car la mort du fils revient a finir de traiter la ligne de commande. UNe fois la commande traitee dans mon interpreteur, il fork a nouveau, ...
Merci encore pour ton aide.
Partager