underlig fejl ved message overførsel
Jeg har det her kode:void msg_send(int id, int fra, int til) {
if (id<13){
printf("Sender besked hvor id=%d, fra=%d, til=%d\n",id,fra,til);
}
int msqid;
int msgflg = IPC_PRIVATE | 0666;
key_t key;
message_buf sbuf;
size_t buf_length;
key = 1234;
/*(void) fprintf(stderr, "\nmsgget: Calling msgget(%#lx,\%#o)\n",key, msgflg); */
/*printf("msgget status: %d\n", msqid = msgget(key, msgflg));*/
if ((msqid = msgget(key, msgflg)) < 0) {
printf("Fejl i at skabe køen\n");
perror("msgget");
exit(1);
}
else
/*(void) fprintf(stderr,"msgget: msgget succeeded: msqid = %d\n", msqid); */
/*We'll send message type 1 */
sbuf.til = til;
sbuf.mtype = id;
sbuf.fra = fra;
buf_length = strlen(sbuf.mtext) + 1 ;
/* Send a message. */
if (msgsnd(msqid, &sbuf, buf_length, IPC_NOWAIT) < 0) {
printf("ERROR");
exit(1);
}/* else {
printf("Besked sendt\n");
}*/
printf("Send: tog=%d, fra=%d, til=%d\n",sbuf.mtype,sbuf.fra,sbuf.til);
}
void udfoer_forespoergsel(message_buf besked) {
/*printf("Forespørgsel fra tog %d fra segment %d til segment %d\n", besked.mtype, besked.fra, besked.til);*/
if (besked.mtype<13) { /*forespørgsel til forældre-processen*/
printf("Forespørgsel fra tog %d fra segment %d til segment %d\n", besked.mtype, besked.fra, besked.til);
if (sek[besked.til]->status==0) {
msg_send(besked.mtype+12,1,1);/*Sender besked tilbage*/
sek[besked.fra]->status = 0;
/*printf("Status for fra (%d): %d\n",besked.fra,sek[besked.fra]->status);*/
sek[besked.til]->status = 1;
int i = 1;
for(i=1;i<7;i++) {
printf("Segment %d: %d\n",i,sek[i]->status);
}
}
} else {
printf("Svar modtaget til tog %d\n", besked.mtype-12);
}
}
void msg_rec(int afsender, int loop) {
int msqid;
key_t key;
message_buf rbuf;
/*Get the message queue id for the "name" 1234, which was created by the server. */
key = 1234;
if ((msqid = msgget(key, 0666)) < 0) {
perror("msgget");
exit(1);
}
/*Modtag beskeder fra den angivne afsender. Venter på den første besked og læser derefter alle beskeder uden at vente og afslut*/
do {
if (msgrcv(msqid, &rbuf, MSGSZ, afsender, 0) < 0) {
perror("msgrcv");
printf("Fejl i modtagelse af besked");
exit(1);
} else { }
printf("Modtag: tog=%d, fra=%d, til=%d\n",rbuf.mtype,rbuf.fra,rbuf.til);
udfoer_forespoergsel(rbuf);
} while (loop==1);
while(msgrcv(msqid, &rbuf, MSGSZ, afsender, -1) > -1) {
udfoer_forespoergsel(rbuf);
}
}
ideen er at "void msg_rec" skal modtage de her værdier som står i denne sætning:
printf("Send: tog=%d, fra=%d, til=%d\n",sbuf.mtype,sbuf.fra,sbuf.til);
med underligt nok kan "void msg_rec" godt modtage sbuf.mtype og sbuf.fra men i sbuf.til bruger den værdien fra sbuf.fra???