bonjour tout le monde
j'ai crée un programme qui exécute la commande shell suivante :
qui retourne le nombre de lignes qui continent le mot root .
Code : Sélectionner tout - Visualiser dans une fenêtre à part aux/grep root/wc -l
le problème se que la compilation et correcte pas de Warnning mais qu'il ne veux pas exécuter .après chaque compilation j'obtiens un nomDeMonProg.out correctement .j'ai essayer avec deux méthode !!!
1-avec la fonction system();
2-avec la fonction execvp();
"je travail sous linux fedora 10 ,compilateur gcc "
voila mon code
erreur numéro 105 ou erreur numéro 100 pendant l'exécution pendant l'exécution !! pour résoudre le problème j'ai essayer de le résoudre avec deux méthodes.
mon premier code et avec l'appel system par la fonctionet le deuxième avec
Code : Sélectionner tout - Visualiser dans une fenêtre à part system();voila mon code 1:
Code : Sélectionner tout - Visualiser dans une fenêtre à part execvp();
autre methode avec la fonction execvp();
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 #include<stdio.h> #include<stdlib.h> #include<sys/wait.h> #include<unistd.h> int main(void) { int tube1[2]; pipe (tube1); pid_t pid1=fork(); if (pid1>0) { close (1); dup (tube1[1]); close(tube1[0]); system("ps aux"); } else { int tube2[2]; pipe(tube2); pid_t pid2=fork(); if (pid2>0){ close(0); dup(tube1[0]); close(1); dup(tube2[1]); close (tube1[1]); close(tube2[0]); system ("grep root"); } else { close(0); dup(tube2[0]); close(tube1[0]); close(tube1[1]); close(tube2[1]); system("wc -l"); }} return 0; }
merci bien d'avance
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 #include<stdio.h> #include<stdlib.h> #include<sys/wait.h> #include<unistd.h> int main(void) { int tube1[2]; pipe (tube1); pid_t pid1=fork(); if (pid1>0) { close (1); dup (tube1[1]); close(tube1[0]); char * arg1[] = {"ps","-aux",(char *)NULL}; execvp("ps",arg1); } else { int tube2[2]; pipe(tube2); pid_t pid2=fork(); if (pid2>0){ close(0); dup(tube1[0]); close(1); dup(tube2[1]); close (tube1[1]); close(tube2[0]); char* arg2[]={"grep","root",(char *)NULL}; execvp("grep",arg2); } else { close(0); dup(tube2[0]); close(tube1[0]); close(tube1[1]); close(tube2[1]); char * arg3[]= {"wc","-l",(char*)NULL}; execvp("wc",arg3); }} return 0; }
Partager