Probleme de processus sous linux

simachille Messages postés 79 Statut Membre -  
simachille Messages postés 79 Statut Membre -
Bonjour,
Je fais de la programmation c sous linux
je dois ecrire un programme qui "Permet de creer un processus fils. Ce dernier lit 10 carracteres en entrée standard et les envoit via un pipe à son pere . le pere va les lire er les affiche à l' écran"

J'ai écrit ce code
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
void main()
{
int i,pid,T[2];
int tab1[10],tab2[10];
pipe(T);

pid=fork();
if( pid == -1)
{ printf ("\nErreur echec de fork\n");
exit(1);
}
if (pid==0)
{
printf ("Je suis le Fils\n");
close( T[0]);
for ( i=0;i<5;i++)
{
printf("\n\nDonner le caractère de numéro %d\n",(i+1));
scanf("%d",&tab1[i]);
}
write(T[1],tab1,10);
close(T[1]);
}

printf ( "PERE\n");
read( T[0],tab2,10);
printf("Début affichage FILS---------------------------------------------------------\n");
for ( i=0;i<5;i++)
{
printf("\nle caractère numéro %d est i = %d\n",(i+1),tab2[i]);
}

close(T[0]);
exit(1);
}

le probleme c'est qu'il ya deux affichages mais j comprend pas pourquoi

Merci de m'aider
A voir également:

6 réponses

swed
 
Bonjour,

Quand tu testes le retour du fork :
-1 : erreur
0 : dans le fils
> 0 : dans le père (retour=pid du fils)

Ici, le traitement où tu as affiché "PERE", va se faire si pid==0, mais aussi si pid>0 !!!
Alors, tu obtiens un affichage par le père, et un par le fils.

Il te manque donc juste un else avant printf("PERE") pour que ca fonctionne (à vue d'oeil).

Cordialement,
M.
0
bug
 
.
0
swed
 
Obligé d'écrire un message le 17 pour que celui du 16 apparaisse... étrange....
0
simachille Messages postés 79 Statut Membre
 
J'ai rajouté le else au dessus de pere ce qui me donne ce code
QUI ne me donne toujours pas de solution

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
void main()
{
int i,pid,T[2];
int tab1[10],tab2[10];
pipe(T);

pid=fork();
if( pid == -1)
{ printf ("\nErreur echec de fork\n");
exit(1);
}
if (pid==0)
{
printf ("Je suis le Fils\n");
close( T[0]);
for ( i=0;i<5;i++)
{
printf("\n\nDonner le caractère de numéro %d\n",(i+1));
scanf("%d",&tab1[i]);
}
write(T[1],tab1,10);
close(T[1]);
}
else
printf( "PERE\n");
read( T[0],tab1,10);
printf("Début affichage FILS----------------------------------\n");
for ( i=0;i<5;i++)
{
printf("\nle caractère numéro %d est i = %d\n",(i+1),tab1[i]);
}

close(T[0]);
exit(1);
}
0
swed
 
Bonjour,
Il faudrait commencer par réfléchir avant de coder.
Il faut mettre tout le code concernant le père dans ton else, pas seulement le printf !!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
simachille Messages postés 79 Statut Membre
 
bonjour

Je l'ai fait
mais toujours eu de solution je comprends toujours pas pourquoi
0
simachille Messages postés 79 Statut Membre
 
Bonjour et merci à vous pour vos reponses
J'ai modifié mon code eu niveau du pere
[CODE]else
{
printf( "PERE\n");
read( T[0],tab1,10*sizeof(int));
printf("Début affichage FILS----------------------------------\n");
for ( i=0;i<5;i++)
{
printf("\nle caractère numéro %d est i = %d\n",(i+1),tab1[i]);
}

close(T[0]);
}
exit(1);
}
[/CODE]
voici ce qu'il me donne comme affichage a la lecture
[CODE]Je suis le Fils

Donner le caractère de numéro 1
PERE
[/CODE]

et à la fin
[CODE]Je suis le Fils

Donner le caractère de numéro 1
PERE
1

Donner le caractère de numéro 2
2

Donner le caractère de numéro 3
3

Donner le caractère de numéro 4
4

Donner le caractère de numéro 5
5
Début affichage FILS----------------------------------

le caractère numéro 1 est i = 1

le caractère numéro 2 est i = 2

le caractère numéro 3 est i = 3

le caractère numéro 4 est i = 4

le caractère numéro 5 est i = 5
[/CODE]
normalement c'est la pere qui devrait afficher et pas le fils j vois pas le probleme
j comprend non plus pourquoui pere s'affiche quand on demande le premier caractere

Merci pour votre aide
0