Je bloque vraiment sur un code je ne vois pas comment my prendre

il y a deux code un qui decoupe les mots un qui les parse

le premier

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
/* decouper  --  decouper une chaine en mots */
int
decouper(char * ligne, char * separ, char * mot[], int maxmot){
  int i;
 
  mot[0] = strtok(ligne, separ);
  for(i = 1; mot[i - 1] != 0; i++){
    if (i == maxmot){
      fprintf(stderr, "Erreur dans la fonction decouper: trop de mots\n");
      mot[i - 1] = 0;
      break;
    }
    mot[i] = strtok(NULL, separ);
  }
  return i;
}
 
# ifdef TEST
int
main(int ac, char * av[]){
  char *elem[10];
  int i;
 
  if (ac < 3){
    fprintf(stderr, "usage: %s phrase separ\n", av[0]);
    return 1;
  }
 
  printf("On decoupe '%s' suivant les '%s' :\n", av[1], av[2]);
  decouper(av[1], av[2], elem, 10);
 
  for(i = 0; elem[i] != 0; i++)
    printf("%d : %s\n", i, elem[i]);
 
  return 0;
}
# endif

et le deuxième qu'on doit changé pour Rajouter la possibilité de lancer des processus en arrière-plan quand la ligne de commande se termine par un &. (indication : il suffit de ne pas faire le wait dans le parent).

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
# include <stdio.h>
# include <stdlib.h>
# include <unistd.h>
# include <sys/types.h>
# include <sys/wait.h>
# include <assert.h>
# include <string.h>
 
enum {
  MaxLigne = 1024,              // longueur max d'une ligne de commandes
  MaxMot = MaxLigne / 2,        // nbre max de mot dans la ligne
  MaxDirs = 100,		// nbre max de repertoire dans PATH
  MaxPathLength = 512,		// longueur max d'un nom de fichier
};
 
void decouper(char *, char *, char **, int);
 
# define PROMPT "? "
 
int
main(int argc, char * argv[]){
  char ligne[MaxLigne];
  char pathname[MaxPathLength];
  char * mot[MaxMot];
  char * dirs[MaxDirs];
  int i, tmp;  
 
  decouper(strdup(getenv("PATH")), ":", dirs, MaxDirs);
 
 
  for(printf(PROMPT); fgets(ligne, sizeof ligne, stdin) != 0; printf(PROMPT)){
    decouper(ligne, " \t\n", mot, MaxMot);
    if (mot[0] == 0)            // ligne vide
      continue;
 
 
 
    tmp = fork();               // lancer le processus enfant
    if (tmp < 0){
      perror("fork");
      continue;
    }
 
    if (tmp != 0){             // parent : attendre la fin de l'enfant
      while(wait(0) != tmp)
        ;
      continue;
    }
 
 
				// enfant : exec du programme
    for(i = 0; dirs[i] != 0; i++){
      snprintf(pathname, sizeof pathname, "%s/%s", dirs[i], mot[0]);
      execv(pathname, mot);
    }
                                // aucun exec n'a fonctionne
    fprintf(stderr, "%s: not found\n", mot[0]);
    exit(1);
  }
 
  printf("Bye\n");
  return 0;
 
}

j'ai pensé a utiliser ligne[strlen(ligne) ]) mais je ne vois pas trop comment résoudre ce probème aidez moi svp

merci