Bonjour,
je souhaite actuellement recoder un shell unix (du moins un début de shell, sans les pipe pour l'instant).
A l'heure actuelle, mon programme me permet de lancer une commande du PATH avec ses options.
J'aimerais qu'une fois cette commande executée, je puisse en saisir une autre et ainsi de suite, jusqu'à ce que je fasse CTRL C.
Le soucis c'est que je ne sais absolument pas quoi mettre dans ma boucle, et quelle condition lui passer... J'aimerais qu'en gros mon programme arrête de forker dés un CTRL C mais je sais pas comment implémenter ça ...
Si vous pouviez me donner des pistes, voici mon main actuel et le résultat obtenu notamment en faisant un read sur une saisie de "ls -a" :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
27
28
29
30
31
32
33
34
35
36
37
38 extern char **environ; int rd; int i; char buf[1024]; char **cmd; char **param; char *path; pid_t pid; int status; i = 0; while (i < 1025) { buf[i] = 0; i++; } putchar('>'); status = 0; if ((pid = fork() == -1)) { write(2, "Unable to fork\n", strlen("Unable to fork\n")); return (-1); } if (pid > 0) { putchar('>'); wait(&status); } else { rd = read(0, buf, 1024); path = concat_path(buf); cmd = my_cmd_to_wordtab(buf); param = final_arg(buf); execve(path, param, environ); } close(rd); }Donc voilà, si vous pouviez juste m'aider à raisonner là dessus... me donner des éléments de recherches, des appels système que je peux utiliser, ce serait sympa merci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 ./a.out ls -a . .. a.out concat_path.c main.c main.c~ my_cmd_to_wordtab.c my_str_to_wordtab.c prep_cmd.c recup_path.c recup_path.h recup_path.h.gch
Partager