2015-03-12 3 views
1

Je suis passé par Beej's guides on inter process communication.Types de message 'URGENT' Inter Process Communication

Comment «kirk.c» pourrait-il être modifié pour pouvoir envoyer des messages marqués URGENT? Ces messages URGENT seraient alors ignorés par 'spock.c' et lus par un autre programme?

+6

Les questions qui dépendent du contenu lié risquent de devenir inutiles lorsque le contenu lié n'est pas disponible. Envisagez de créer un exemple minimal, complet et vérifiable: http://stackoverflow.com/help/mcve –

Répondre

1

Dans le fichier kirk.c, nous pouvons introduire une variable enum qui va définir le type de message à envoyer. La structure struct my_msgbuf a une variable membre long mtype;. On peut l'initialiser au type de message avant de l'envoyer au récepteur, dans ce cas - spock.c.

La déclaration enum:

enum msgType { 
    URGENT = 0, 
    NORMAL = 1 
}; 

La déclaration enum ci-dessus peuvent être mis dans un fichier d'en-tête commune à la fois kirk.c et spock.c.

La ligne buf.mtype = 1; /* we don't really care in this case */ devrait être modifié buf.mtype = URGENT; /* we don't really care in this case */

En spock.c, les lignes suivantes:

for(;;) { /* Spock never quits! */ 
    if (msgrcv(msqid, &buf, sizeof(buf.mtext), 0, 0) == -1) { 
     perror("msgrcv"); 
     exit(1); 
    } 
    printf("spock: \"%s\"\n", buf.mtext); 
} 

..will être modifiés pour:

for(;;) { /* Spock never quits! */ 
    if (msgrcv(msqid, &buf, sizeof(buf.mtext), 0, 0) == -1) { 
     perror("msgrcv"); 
     exit(1); 
    } 
    if (URGENT != buf.mtype) { 
     printf("spock: \"%s\"\n", buf.mtext); 
    } 
} 

Ainsi, spock sera "processus" (dans ce cas, il imprime simplement les données comme moyen de traitement) le message seulement si le type de message est autre que URGENT.

+1

Reste en paix, Spock 27/2/2015 –

+0

Comment cela se ferait-il en utilisant strncmp? x –

+0

déclare 'buf.mtype' comme tableau de caractères de la taille de votre choix, mais au moins en ayant le nombre minimum de caractères requis par l'implémentation. Remplacer «URGENT! = Buf.mtype» par «strncmp». –