Bonjour j'aimerais savoir qu'est ce qui cloche dans mon code svp;Je code un convertisseur de devise;J'ai l'impression qu'il n'y a pas d’interaction entre le serveur et le client.
Lors de l'exécution le programme rentre que dans la partie précédent le printf("1")ligne 45; au niveau du client;et dans le serveur cela affiche seulement le printf("serveur"); ligne 40.
Client.c
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
#include<stdio.h>
#include<stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include<fcntl.h>
#include<signal.h>
 
int main(int argc,char **argv)
{
 
	int tube;
	char requete[30]={" "};
 
	char nom_tube[30]={" "};
	char deviseA[30]={" "}; // A->B
	char deviseB[30]={" "};
	char reponse[30]={" "};
	char montant[30]={" "};
	int i;
	FILE *f;
 
	if(argc<2 || argc>2)
	{
		printf("********devise**********\n");
	printf("euro:EUR\tdollard:USD\tlivre britannique:GBP\n");
	printf("ex: %s \"15 EUR GBP\" \n",argv[0]);
	exit(-1);
	}
 
	sscanf(argv[1],"%s %s %s",montant,deviseA,deviseB);
 
	printf("\n\nrecuperer\n");
	printf("montant:%f\ndeviseA:%s\ndeviseB:%s\n\n",atof(montant),deviseA,deviseB);
 
	snprintf(nom_tube,30,"rep%d",getpid());
 
	//printf("c:nom_tube:%s,taille:%d\n",nom_tube,strlen(nom_tube));
	snprintf(requete,30,"%s %s %s %s\0",montant,deviseA,deviseB,nom_tube);
 
	printf("c:requete:%s,taille:%d\n\n",requete,strlen(requete));
 
 
	int err=mkfifo(nom_tube,0666);
	printf("1\n");
 
	//envoie de la requete dans le tube du serveur
	f=fopen(nom_tube,"w");
	printf("2\n");
	if(f==NULL)
	{
		printf("tube non ouvert 1 \n");
		exit(0);
	}
	printf("3\n");
 
		fprintf(f,"%s",requete);
		printf("4\n");
		fclose(f);
		sleep(10);
		f=fopen(nom_tube,"r");
		if(f==NULL)
	{
		printf("tube non ouvert 2 \n");
		exit(0);
	}
 
		fscanf(f,"%s",reponse);
		fclose(f);
 
		remove(nom_tube);
 
		printf("resultat:%f\n",atof(reponse));
 
 
 
	return 1;
}
Serveur.c
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#define n 3
 
#include<signal.h>
void quefaire(int sig)
{
 
	if(sig==SIGINT){
		printf("fin\n");
		remove(nom_tube);
		exit(1);
		}
}
int main(int argc,char **argv)
{
	int tube;
	char requete[30]={" "};
	char nom_tube[30]={" "};
	char deviseA[30]={" "}; // A->B
	char deviseB[30]={" "};
	char reponse[30]={" "};
	char montant[30]={" "};
	//float taux=1.34;
	float taux[n][n]={1.0,1.31072,0.85460,
				0.76301,1.0,0.6527,
				1.17010,1.53346,1.0};
	int i=-1,j=-1;
 
	FILE *Fserveur,*Fclient;
 
	int err=mkfifo(nom_tube,0666);
 
	while(1){
	signal(SIGINT,quefaire);
	printf("serveur\n\n");
 
	Fserveur=fopen(nom_tube,"r");
	if(Fserveur==NULL)
	{
		printf("tube client non ouvert\n");
		exit(0);
	}
 
	fscanf(Fserveur,"%s",requete);
	fclose(Fserveur);
 
		printf("s:lecture conv ok\n");
		printf("s:requete:%s\n",requete);
 
	sscanf(requete,"%s %s %s %s",montant,deviseA,deviseB,nom_tube);
		if(fork()==0){
		if(strcmp(deviseA,"EUR")==0){i=0;}
		if(strcmp(deviseA,"USD")==0){i=1;}
		if(strcmp(deviseA,"GBP")==0){i=2;}
 
		if(strcmp(deviseB,"EUR")==0){j=0;}
		if(strcmp(deviseB,"USD")==0){j=1;}
		if(strcmp(deviseB,"GBP")==0){j=2;}
 
 
		printf("montant:%s\ndeviseA:%s\ndeviseB:%s\nnom_tube:%s\n",
		montant,deviseA,deviseB,nom_tube);	
	        sprintf(reponse,"%f",atof(montant)/taux[i][j]);
 
	        //ecriture du resultat dans le tube client	
	        Fclient=fopen(nom_tube,"w");
	        fprintf(Fclient,"%s",reponse);
 
	        fclose(Fclient);
 
	       //printf("s:ecriture tube client ok\n\=n");
 
		}
         waitpid(-1,NULL,WNOHANG/WUNTRACED);
		}
	return 1;
}