Bonjour à tous,

Etudiant en informatique, il m'est demandé de créer un shell en C qui execute toujours la même commande quelque soit ce que l'utilisateur écrive (et exit lorsque l'utilisateur rentre "exit").
J'ai réussi à le faire pour des commandes simples tel que "mkdir", "ls", etc dont voici le code :

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
 
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
 
int main ()
{   int i;
    char *ligne;
    char *tokens[100];
    char *cmd;
    char *commande = "mkdir brol";
 
    ligne=(char*)malloc(300);
    printf("$ ");
    fgets(ligne,256,stdin);
 
    while (strcmp(ligne,"exit\n"))
    {  
        i=0;
        cmd = strdup(commande);
        tokens[i]=strtok(cmd, " \n");
        while (tokens[i] != NULL) tokens[++i]=strtok(NULL," \n");
        if (fork()==0)
        {   execvp(tokens[0],tokens);
            printf("Commande invalide\n");
            exit(1);
        }
        wait(0);
        free(cmd);
        printf("$ ");
        fgets(ligne,256,stdin);
    }
    exit(0);
}
Le problème, c'est qu'il m'est demandé de faire cela pour la commande "mkdir brol && (cd brol;>f)" . Lorsque j'utilise cette commande, le programme crée 3 dossiers "&&", "brol;>f", "brol", et "(cd".

Comment faire pour que ce programme execute bien la commande "mkdir brol && (cd brol;>f)", c'est à dire, qu'elle crée un dossier "brol" et crée un fichier "f" dedans ?

Merci d'avance pour votre aide