Bonjour,
je recode actuellement un minishell unix.
A l'heure actuelle, je suis confronté au problème suivant :
lorsque je ne rentre pas de commande à mon programme (que j'appuie direct sur entrée à la place de saisir une commande seule / avec des options), je veux que mon programme affiche "Pas de commande saisie, veuillez tapez une commande\n" et qu'un appel à read soit relancé etc., bref, que mon programme ne s'arrête pas.
Mon programme fonctionne bien, SAUF quand je ne saisi pas de commande, dans le 2e code ci-dessous, je tape successivemnt "ls", "ls -l", "ls -l -a", "\n", "ls".
Dés que je fais \n, les commande que je tape ensuite sont erronnées :
Si je retape une commande ensuite j'ai toujours le "commande:erreur d'écriture:Mauvais descripteur de fichier".
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 ./a.out ls a.out main.c~ my_str_to_wordtab.c put_env_in_list.c concat_path.c my_cmd_to_wordtab.c no_cmd.c recup_path.c concat_path.c~ mysh.h prep_av.c main.c mysh.h.gch prep_av.c~ ls -a . concat_path.c~ mysh.h prep_av.c .. main.c mysh.h.gch prep_av.c~ a.out main.c~ my_str_to_wordtab.c put_env_in_list.c concat_path.c my_cmd_to_wordtab.c no_cmd.c recup_path.c ls -la // Alignement ok, problème formatage suite au masquage groupe et login total 2468 drwxr-xr-x 2 login groupe 4096 25 avril 14:56 . drwxr-xr-x 57login groupe 4096 24 avril 19:40 .. -rwxr-xr-x 1 login groupe 14167 25 avril 14:56 a.out -rw-r--r-- 1 login groupe 1575 25 avril 14:36 concat_path.c -rw-r--r-- 1 login groupe 1675 25 avril 14:22 concat_path.c~ -rw-r--r-- 1 login groupe 943 25 avril 14:52 main.c -rw-r--r-- 1 login groupe 898 25 avril 14:51 main.c~ -rw-r--r-- 1 login groupe 1196 24 avril 19:12 my_cmd_to_wordtab.c -rw-r--r-- 1 login groupe 1223 24 avril 18:13 mysh.h -rw-r--r-- 1 login groupe 2450992 24 avril 21:26 mysh.h.gch -rw-r--r-- 1 login groupe 1254 24 avril 14:09 my_str_to_wordtab.c -rw-r--r-- 1 login groupe 465 23 avril 22:58 no_cmd.c -rw-r--r-- 1 login groupe 1132 25 avril 14:39 prep_av.c -rw-r--r-- 1 login groupe 1206 25 avril 14:37 prep_av.c~ -rw-r--r-- 1 login groupe 1926 23 avril 20:09 put_env_in_list.c -rw-r--r-- 1 login groupe 1388 24 avril 14:25 recup_path.c //Je tape ici '\n' seulement Pas de commande saisie, veuillez saisir une commande ls ls: erreur d'écriture: Mauvais descripteur de fichier
Si je retape directement "\n", ca me fait juste un"\n", ça n'écrit plus "Pas de commande saisie, veuillez saisir une commande".
Voici mon main :
Donc voilà en somme j'aimerais que cette portion du main ne fasse pas tout foirer
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 int main() { extern char **environ; int rd, i, status; int stop = 0; char buf[1024]; pid_t pid; while (!stop) { i = 0; while (i < 1025) { buf[i] = 0; i++; } rd = read(0, buf, 1024); if (strncmp(buf, "exit", 4) == 0) stop = 1; else { if ((pid = fork())) waitpid(pid, &status, 0); else { if (no_cmd(buf) == 0) printf("Pas de commande saisie, veuillez saisir une commande\n"); else { struct s_final_path *fpp = init_final_path(); char *ret = ret_valid_path(fpp, buf); char **argvv = prep_arg_exec(buf); execve(ret, argvv, environ); } } close(rd); } } }
Si vous pouviez m'expliquer quel est le problème et me conseiller ce serait sympa
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 if (no_cmd(buf) == 0) printf("Pas de commande saisie, veuillez saisir une commande\n");
Merci !
Partager