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
Partager