Proces kommunikation (message passing)
Hejsa, jeg har fået en proces P1 til at sende en message til en anden proces P2. Men hvorfor kan jeg ikke sende en besked tilbage fra P2 til P1 om at jeg har fx modtaget beskeden? Og hvad gør jeg (rent kodemæssigt) for at gøre det? Desuden kunne jeg godt tænke mig om det ikke er muligt at sende fx. to forskellige message-quees fra P1 til P2, og i såfald hvordan rent kodeteknisk?Jeg bruger c++ (Linux Mandrake 8.2)
Min kode til at modtage og sende beskeder kommer her:
struct my_msg_st {
long int my_msg_type;
char some_text[MAX_TEXT];
};
int msg_send(char *buffer,int key/*, int prioritet*/)
{
int running = 1;
struct my_msg_st some_data;
int msgid;
msgid = msgget((key_t)key, 0666 | IPC_CREAT);
if (msgid == -1) {
fprintf(stderr, "msgget failed with error: %d\n",errno);
exit(EXIT_FAILURE);
}
some_data.my_msg_type = 1;
strcpy(some_data.some_text, buffer);
if(msgsnd( msgid, (void *)&some_data, MAX_TEXT, 0) == -1) {
fprintf(stderr, "msgsnd failed");
exit(EXIT_FAILURE);
}
running = 0;
exit(EXIT_SUCCESS);
}
char *msg_rcv(int key)
{
int running = 1;
int msgid;
struct my_msg_st some_data;
long int msg_to_receive = 0;
msgid = msgget((key_t)key, 0666 | IPC_CREAT);
if(msgid== -1){
fprintf(stderr, "msgget failed with error: %d\n", errno);
exit(EXIT_FAILURE);
}
if(msgrcv(msgid, (void *)&some_data, BUFSIZ,
msg_to_receive, 9) == -1){
fprintf(stderr, "msgrcv failed with errir: %d\n", errno);
exit(EXIT_FAILURE);
}
return some_data.some_text;
}