slt tout le monde :
encore j'insiste sur le point des pipes qu'on peux les realiser a l'aide d'un seul tableau tube mai a chaque fois il aut ecrire de dans . ou lire de ce dernier
voici ce code mais j'ai besoin d'une explication pourquoi ça pas marche?? essaié par exemple avec la commande ls -l|wc d'ailleur si vous remarqué il n'entre pas dans le 2ieme if ou il y' a des *******
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
 
  #include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include<string.h>
main(void)
{
char commande[80];
char *copie,*buffer,*tranche;
int tube[2];
int p=0;
int t=0;
char *file=NULL;
char *argv[10];
char *B=NULL;
char *res=NULL;
char *comup=NULL;
if (pipe(tube) == 1)
syserr("pipe");
printf("entrer des commandes en pipe\n");
gets(commande);
copie= strdup(commande);
tranche = strtok_r(copie,"|",&buffer);
while (tranche != NULL)
{
switch (fork())
{
case 1:
syserr("fork");
case 0:
if (p!=0)
{
if (close(0) == 1)
syserr("close3");
if (dup(tube[0]) != 0)
syserr("dup3");
if (close(tube[0]) == 1
|| close(tube[1]) == 1)
syserr("close4");
while (wait(NULL) != 1);
}
if (strtok_r(NULL,"|",&buffer) != NULL)  *********
{
if (close(1) == 1)
syserr("close");
if (dup(tube[1]) != 1)
syserr("dup");
if (close(tube[0]) == 1
|| close(tube[1]) == 1)
syserr("close2");
}
comup = strdup(tranche);
res = strtok_r(comup," ",&B);
file = res;
if (res != NULL) file =res; else res=tranche;
while(res != NULL)
{
argv[t]=res;
t++;
res = strtok_r(NULL," ",&B);
}
argv[t]=NULL;
//printf("path = %s\n",getenv("PATH"));
execvp(file,argv);
exit(0);
break;
}
tranche= strtok_r(NULL,"|",&buffer);
p=1;
}
}
/**/
/* Traitement des erreurs */
/**/
syserr(char *s)
{
printf("erreur de la primitive ");
printf("%s\n",s);
exit(1);
}
merci d'avance.