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
|
/*********************************************************************************************/
/* Processus client: envoi de la requête de réservation: */
/* Nom du film, Date et nombre de places à réserver: */
/*********************************************************************************************/
#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#define CLE 17
struct requete {
long letype ;
char film(30) ;
int date ;
int nb_places ;
pid_t mon_pid ;
} ;
struct reponse {
long letype ;
int reponse ;
} ;
main()
{
int msqid, l, film, date ;
struct requete la_requete ;
struct reponse la_reponse ;
/* récupération du msqid */
if((msqid=msgget((key_t)CLE,0))<0)
{
perror("msgget") ;
exit(1) ;
}
/* préparation de la requête et envoi */
printf ("Nom du film, date et nombre de places :");
scanf ("%d %d %d", &film, &date, &nb_places) ;
la_requete.letype = 1 ;
la_requete.date = date ;
la_requete.film = film ;
la_requete.nb_places = nb_places ;
la_requete.mon_pid = getpid();
if(msgsnd(msqid,&la_requete,sizeof(struct requete)-4,0)==-1)
{
perror("msgsnd");
exit(2);
}
/* réception de la réponse */
if((l=msgrcv(msqid,&la_reponse,sizeof(struct reponse)-4,getpid(),0)==-1))
{
perror("msgrcv");
exit(2);
}
printf ("le resultat reçu est: %d", la_reponse.res);
exit(0);
} |
Partager