[débutant] Communication inter-processus
Bonjour à tous!!!
Je m'initie à la communication inter-processus, et par là-même je découvre le C (quel beau langage!!!)
Bon voilà mon petit problème, je tourne en rond depuis ce matin :
Je crée 3 tubes (tube[3][2]) à l'aide de la fonction pipe : pipe(tube[i]) (avec i entre 0 et 2)
Ensuite je crée trois processus fils. Le père envoie 0 au 1er processus, 1 au 2ème et 2 au 3ème.
Quand je code tout dans le main, pas de problème ça fonctionne.
Mais pour éviter les lignes redondantes, j'ai voulu faire une fonction lecture(int n); (avec n entre 0 et 2), et là ça ne marche plus!!!
Voici mon code :
Code:
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 81 82 83
|
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
int tube[3][2];
void lecture(int n)
{
char buf[6];
printf("%d-1\n",n);
close(tube[n][1]);
printf("%d-2\n",n);
read(tube[n][0], &buf, 6*sizeof(char));
printf("%d-3\n",n);
printf("buffer fils %d : %s\n",n ,buf);
}
int main(void)
{
int i;
pid_t pid[3];
/* Initialisation des tubes */
pipe(tube[0]);
pipe(tube[1]);
pipe(tube[2]);
if(fork() == 0)
{
/* Nous sommes dans le fils 0 */
lecture(0);
exit(0);
}
else
{
/* Nous sommes dans le père */
char buffer[6];
close(tube[0][0]);
sprintf(buffer,"%d",0);
printf("buffer père 0 : %s\n", buffer);
write(tube[0][1], &buffer, 6*sizeof(char));
wait();
}
if(fork() == 0)
{
/* Nous sommes dans le fils 1 */
lecture(1);
exit(0);
}
else
{
/* Nous sommes dans le père */
char buffer[6];
close(tube[1][0]);
sprintf(buffer,"%d",1);
printf("buffer père 1 : %s\n", buffer);
write(tube[1][1],&buffer,6*sizeof(char));
wait();
}
if(fork() == 0)
{
/* Nous sommes dans le fils 2 */
lecture(2);
exit(0);
}
else
{
/* Nous sommes dans le père */
char buffer[6];
close(tube[2][0]);
sprintf(buffer,"%d",2);
printf("buffer père 2 : %s\n", buffer);
write(tube[2][1],&buffer,6*sizeof(char));
wait();
}
} |
Vraiment je n'y comprends rien... Le fils 0 reçoit bien mon caractère, mais les deux autres ne dépassent pas le [b]read(...)[\b].
Quelqu'un peut-il m'aider???