bonjour à tous,
Je travvaille en C sur linux
le but de mon programme est de créer un 2 pipes vers un programme de façon a ce que ce programme lise des données sur stdin et renvois des données sur stdout
j'ai réussit dans le cas ou je n'ai qu'une trame a envoyé et ça se complique lorsque j'en envois plusieurs voila les 2 programme que j'ai écrit
le programme qui recoit par stdin et renvois par stdout
je l'ai nommé readStd
le programme qui crée les pipes :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 int main () { //receive message data char inbuff[10000]; // receive the message though stdin while (fgets (inbuff, 10000, stdin) != NULL) { fprintf (stderr, "bien recu %s\n", inbuff); fprintf (stdout, "bien recu %s\n", inbuff); } return 0; }
j'arrive a recoir le premier message mais pas les suivants et je comprends pas ce que je fait de malCode:
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 static int aleatoire (int maximum) { double d; d = (double) maximum * rand(); d = d / (RAND_MAX + 1.0); return ((int) d); } int main (int argc, char * argv[]) { int tube_1[2]; int tube_2[2]; if ((pipe(tube_1) != 0) || (pipe(tube_2) != 0)) return -1; switch (fork()) { case -1 : close(tube_1[0]); close(tube_1[1]); close(tube_2[0]); close(tube_2[1]); return -1; case 0 : close(tube_1[1]); close(tube_2[0]); dup2(tube_1[0], STDIN_FILENO); close(tube_1[0]); dup2(tube_2[1], STDOUT_FILENO); close(tube_2[1]); execv ("readStd", NULL); exit(EXIT_SUCCESS); default : close(tube_1[0]); close(tube_2[1]); char trameIP[256] = ""; while(1) { int attente = 1000000*aleatoire(5); sprintf (trameIP, "trame à envoyé %d\n", attente); fprintf (stderr, "trame à envoyé %d\n", attente); write(tube_1[1], trameIP, strlen(trameIP)+1); usleep(attente); } } return 0; }
si quelqu'un a une piste merci :)
edit:
je précise que les stderr sont la uniquement pour avoir une sortie et que je ne gère pas les stdout pour le moment j'attends de gérer les stdin d'abords correctement