Probleme de processus sous linux
simachille
Messages postés
79
Statut
Membre
-
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
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
Configuration: Linux / Firefox 3.5.8
6 réponses
-
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. -
-
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);
} -
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 !! -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
bonjour
Je l'ai fait
mais toujours eu de solution je comprends toujours pas pourquoi -
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