Bonjour,

Je dois créer un Shell simple. Un prompt affiche et je peux écrire des commandes qui n'existent pas dans le vrais Bash mais qui simule leur action.

Mais mon problème est que je sors de mon programme et j'aimerai que mon prompt s'affiche à nouveau
je ne réussi pas à comprendre comment faire pour que suite à un execl() je puisse retrouver mon pompt
et sortir seulement quand on écrit exit!

j'utilise un while(1)
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <string.h>
#include <sys/wait.h>
 
int main(int argc, char *argv[]){
 
    int status;
    char buffer[500];
 
    printf("\nDans MON SHELL  écrire \"exit\" pour quitter\n");
 
    int pid = fork();
 
    if(pid == -1){
        perror("Une erreur c'est produite : création du  fork");
        return EXIT_FAILURE;
 
    }
 
    if(pid == 0){
 
        while(1){
            printf("MONSHELL > : ");
 
            scanf("%s", buffer);
 
 
            if (strcmp("exit", buffer) == 0){
                exit(0);
 
            }else if(strcmp("dir", buffer) == 0){       //je ne retrouve pas mon promp pour entrer par exemple ctr...
 
                execl("/bin/ls", "ls", "-l", NULL);
 
            }else if(strcmp("ctr", buffer) == 0){  
 
	    	    execl("/usr/bin/clear", "clear", NULL);
 
	        }else if(strcmp("environ", buffer) == 0){  
 
	    	    execl("/usr/bin/env", "env", NULL);
 
	        }else if(strcmp("echo", buffer) == 0){    //ici si j'écris echo cmd j'aimerai que seulement le cmd affiche....
                printf("%s\n", &buffer);
 
            }else{
 
                printf("Commande inconnue ...\n");
            }
        }//fin wihile
 
    }//fin if =0
 
    if(pid > 0){
 
        if(wait(NULL) == -1){
            perror("erreur de wait cote parent\n");
            exit(EXIT_FAILURE);
        }
 
    }//fin if > 0
      return EXIT_SUCCESS;
}//fin main

merci beaucoup