begin process at 2012 05 28 22:00:17
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Linux

 > 

Autre

 > 

Communication entre pere et fils


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Communication entre pere et fils

mardi 8 janvier 2008 à 10:43:29 | Communication entre pere et fils

anek971

Bonjour,
Je dois actuellement codé un petit programma a priori simple sous linux.
Il s'agit de faire un programme client serveur avec le client qui envoit 2 entier et le serveur qui fait la somme et renvoi le résultat.
Biensur le client affiche le résultat donnée par le serveur.
Je précise que j'ai pour obligation d'utiliser les tubes.
Mon problème est je pense plus au niveau de la compréhension des systemes de pipes.

Au départ mon programme a donné ca :
[code]
clude <unistd.h>
#include <fcntl.h>
/*variables globale*/
int pid;//retourne le pid du fils
int tube[2];//tube avec les 2 descripteurs ecriture et lecture du tube
//tube[0] est le descripteur pour la lecture
//tube[1] est le descripteur pour l'ecriture
/*prototype fonction*/
void pere();
void fils();
/*fonction principale*/
int main()
{
pipe(tube);//creation du tube
switch(pid=fork())//pid prend le pid du fils et fork crée pere et fils
{
case -1:perror("fork");break; //en cas d'erreur
case 0:fils();break;//chez le fils
default:pere();break;//chez le pere
}

return 0;
}

/*fonction*/
/*fonction client*/
void pere()
{
int nbre[2];
int res=0;
int i;
printf("\n[pere] Ecrire 2 chiffres : ");
for(i=0;i<1;i++)
scanf("%d",&nbre[i]);
/*si on a pas ecrit 2 entier on ecrit l'erreur*/
if(write(tube[1],nbre,2)!=2*sizeof(int))
perror("[pere] write");
/*plus besoin d'ecrire*/
close(tube[1]);
/*on attend la fin de l'action du fils*/
wait(0);
printf("\n[pere] %d + %d = ",nbre[0],nbre[1]);
/*si on a pas un entier a lire on ecrit l'erreur*/
if(read(tube[0],&res,1)!=sizeof(int))
perror("[pere] read");
close(tube[0]);
}
/*fonction serveur*/
void fils()
{
int nbre[2];
int res=0;
/*si on ne lit pas 2 entier dans le tube*/
if(read(tube[0],nbre,2)!=2*sizeof(int))
perror("[fils] read");
/*je ferme le descripteur en lecture car je n'ai plus besoin de lire*/
close(tube[0]);
printf("\n[fils] j'ai recu %d et %d \n",nbre[0],nbre[1]);
res=nbre[0]+nbre[1];
printf("\n[fils] je dois retourner %d \n",res);
/*si on ecrit pas un entier dans le tube*/
if(write(tube[1],&res,1)!=sizeof(int))
perror("[fils] write");
close(tube[1]);
}
[/code]
j'avais pour résultat :
[pere] Ecrire 2 chiffres : 10
2
[pere] write: Success
[fils] read: Success

[fils] j'ai recu 9633802 et 134514496

[fils] je dois retourner 144148298
[fils] write: Illegal seek

[pere] read: Illegal seek
[pere] 10 + 2 =

Ensuite quelque par d'autre on m'a dit qu'en faite c'etait normal car quand je crée un tube  si le pere est en ecriture le fils ne pourra pas l'etre  sur le meme tube donc il fallait que j'en crée un deuxieme.
J'ai donc crée un deuxieme tube nommé tube2[2]; et la ou  le fils doit ecrite la reponse au pere j'ai mis tube2[1] au lieu de tube[1] et la oou le pere doit lire la reponse tube2[2] au lieu de tube[2].
Cependant meme resultat.
Merci d'avance



Cette discussion est classée dans : int, fils, pere, nbre, tube


Répondre à ce message

Sujets en rapport avec ce message

Explication et correction de ce programme [ par bounkolh ] Bonjour, est ce que quelqu'un peut m'aider à expliquer et corriger ce programme svp? #include #include int main(int argc, char *argv[]) { int mon Heapsort [ par Striders77 ] Bonjour,Je dois programmer la fonction HEAPSORT en C et j'ai beacoup de mal avec l'algorythme. Si quelqu'un sait jeter un coup d'oeil...Merci d'avance Communiquer entre processus avec des pipe [ par akrogames ] Bonjour, Je souhaite réaliser un programme pour m'entrainer à créer des anneaux avant de passer à la programmation socket. Mon objectif : faire pass anagrammes récursifs [ par sumakotra ] /* Bonjour a tous ... voila j'voulais faire un programme sortant tout les anagrammes d'un mot en permutant les différentes lettres et en affichant a c rien ne s'affiche a l'execution(les tubes ordinaires) [ par brekiano ] bonsoir,  svp chui débutant dans la programmation systeme sous unix.j'ai fait ce programme qui affiche normalement le résultats de ce pipes :    ]$ ps probleme à l'execution [ par jimdano ] Bonjour, Je cherche a "jouer" avec des points, paramètres : abscisses (getX(), setX()) et ordonnées(getY(),setY()). J'ai une classe "nuage de point Enchaîner une série de commandes avec des pipes [ par Enai ] Bonjour, j'ai un projet qui consiste à créer un mini Shell, je dois donc créer une succession de pipe en fonction du nombre de commande que j'entre. P pb de class [ par bidules ] bonjour,ya un truc que je comprend pas :g 2 class (bidon):class chiffre{public :int x,y;chiffre(int a,int z); //le constructeur};class nbre{int o,pp Explication de ce programme [ par bounkolh ] Bonjour est ce que quelqu'un peut m'expliquer le déroulement de ce programme svp? #include #include int main(int argc, char *argv[ ]) { int tube[2 file de message, pere-fils sous unix [ par adri85 ] Bonjour,je souhaite que le processus père de mon application envoie 2 nombres entiers plus un opérande ( + - * / %) a un fils par le biais d'une file


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,952 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales