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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 mal
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 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







Répondre avec citation
Partager