Avatar billede trp79 Nybegynder
15. oktober 2002 - 00:28 Der er 3 kommentarer og
1 løsning

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;
}
Avatar billede jpk Nybegynder
15. oktober 2002 - 08:24 #1
Hvad siger dokumentationen på msgget og hvad er dens formål?
Avatar billede trp79 Nybegynder
15. oktober 2002 - 09:04 #2
msgget: Anvendes til at oprette og tilgå en beskedkø.
Avatar billede trp79 Nybegynder
15. oktober 2002 - 09:10 #3
msgctl: Anvendes til at kontrollere beskedkøens informationer.
Avatar billede trp79 Nybegynder
05. januar 2003 - 14:15 #4
lukket
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester