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
A voir également:
- Probleme de processus sous linux
- Linux reader - Télécharger - Stockage
- Backtrack linux - Télécharger - Sécurité
- R-linux - Télécharger - Sauvegarde
- Toutou linux - Télécharger - Systèmes d'exploitation
- Damn small linux - Télécharger - Systèmes d'exploitation
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.
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);
}
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 !!
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 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
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