Saturday, March 31, 2012

A message queue program that shows a client server implementation this is the reciever program using Message Queues.

/*
 * A message queue program that shows a client server implementation
 * this is the reciever program using Message Queues
 */
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>

struct my_msg_st {
        long int my_msg_type;
        char some_text[BUFSIZ]; };

int main(void)
{
        int running = 1;
    int msgid;
    struct my_msg_st some_data;
    long int msg_to_recieve = 0;

    /* Let us set up the message queue */
    msgid = msgget((key_t)1234, 0666 | IPC_CREAT);

    if (msgid == -1) {
      perror("msgget failed with error");
      exit(EXIT_FAILURE);
    }

    /* Then the messages are retrieved from the queue, until an end message is
     * encountered. lastly the message queue is deleted
     */

    while(running) {
      if (msgrcv(msgid, (void *)&some_data, BUFSIZ,
             msg_to_recieve, 0) == -1) {
        perror("msgcrv failed with error");
        exit(EXIT_FAILURE);
      }
      printf("You wrote: %s", some_data.some_text);
      if (strncmp(some_data.some_text, "end", 3) == 0) {
        running = 0;
      }
    }

    if (msgctl(msgid, IPC_RMID, 0) == -1) {
      perror("msgctl(IPC_RMID) failed");
      exit(EXIT_FAILURE);
    }

    exit(EXIT_SUCCESS);
}

No comments:

Post a Comment