message passing
Vi har et kæmpe problem ang. message passing. vi har to struct og to msgid. de bliver sendt fra enclient process og modtaget i en server process(koden neden for). vores problem
er at vi ikke kan få modtagelsen til at kende for skel på de to struct og de to msgid!!
hvordan kan dette lade sig gøre?????????????????
struct vare_msg
{
long int msg_type_vare;
char besked[MAX_TEXT];
//int initial;
};
struct antal_msg
{
long int msg_type_antal;
int stk;
};
struct ud_vare_msg
{
long int msg_type_udvare;
char besked[MAX_TEXT];
};
struct ud_antal_msg
{
long int msg_type_udantal;
int stk;
};
struct vare_msg vare;
struct ud_vare_msg ud_vare;
struct antal_msg antal;
struct ud_antal_msg ud_antal;
long int msg_type_vare = 1;
long int msg_type_antal = 1;
long int msg_type_udvare = 2;
long int msg_type_udantal = 2;
/*
long int vare_modtagelse = 1;
long int antal_modtagelse = 1;
long int ud_vare_modtagelse = 2;
long int ud_antal_modtagelse = 2;
*/
int main()
{
msgid = msgget((key_t)1234, 0666 | IPC_CREAT);
msgid2 = msgget((key_t)1235, 0666 | IPC_CREAT);
//msgid3 = msgget((key_t)1113, 0666 | IPC_CREAT);
//sem_id = semget((key_t)1234, 3, 0666 | IPC_CREAT);
//if(msgid1 == -1 || msgid2 == -1 || msgid3 == -1)
if(msgid == -1)// || msgid2 == -1)
{
fprintf(stderr, "Fejl i message: %d \n", errno);
exit(EXIT_FAILURE);
}
while (running)
{
/***************************INDLEVERING**************************************************/
printf("vare:Vare:%s\n", vare.besked);
if(msgrcv(msgid, (void *)&vare, BUFSIZ, msg_type_vare, 0) == -1)
{
printf("1vare:Vare:%s, Antal stk:%d\n", vare.besked, antal.stk);
fprintf(stderr, "Fejl i message modtagelse1: %d \n", errno);
exit(EXIT_FAILURE);
}
printf("2vare:Vare:%s, Antal stk:%d\n", vare.besked, antal.stk);
if(msgrcv(msgid, (void *)&antal, BUFSIZ, msg_type_antal, 0) == -1)
{
printf("3 Antal stk:%d\n", antal.stk);
fprintf(stderr, "Fejl i message modtagelse2: %d \n", errno);
exit(EXIT_FAILURE);
}
printf("Flg. Indlevering er fortaget - Vare:%s, Antal stk:%d\n", vare.besked, antal.stk);
/***************************INDLEVERING SLUT**************************************************/
/***************************UDLEVERING**************************************************/
if(msgrcv(msgid2, (void *)&ud_vare, BUFSIZ, msg_type_udvare, 0) == -1)
{
fprintf(stderr, "Fejl i message modtagelse3: %d \n", errno);
exit(EXIT_FAILURE);
}
printf("5vare:Vare:%s, Antal stk:%d\n", ud_vare.besked, ud_antal.stk);
if(msgrcv(msgid2, (void *)&ud_antal, BUFSIZ, msg_type_udantal, 0) == -1)
{
fprintf(stderr, "Fejl i message modtagelse4: %d \n", errno);
exit(EXIT_FAILURE);
}
printf("6vare:Vare:%s, Antal stk:%d\n", ud_vare.besked, ud_antal.stk);
//if(vare.msg_type_vare == 2 && antal.msg_type_antal == 2)
//{
printf("Flg. Udlevering er fortaget - Vare:%s, Antal stk:%d \n", ud_vare.besked,ud_antal.stk);
/***************************UDLEVERING SLUT**************************************************/
}