==============================================================
Experiment 07: IPC Using Message Queues
==============================================================
[Back to Index]
--------------------------------------------------------------
THEORY:
System V Message Queues allow processes to exchange
data as messages stored in a kernel-managed queue.
System Calls:
msgget() - Create/access message queue
msgsnd() - Send a message
msgrcv() - Receive a message
msgctl() - Remove the queue
AIM: Sender sends a string, receiver reverses it,
sender checks if it's a palindrome.
--------------------------------------------------------------
PROGRAM 1: sender.c
--------------------------------------------------------------
#include <stdio.h>
#include <string.h>
#include <sys/ipc.h>
#include <sys/msg.h>
struct message {
long type;
char text[100];
};
int main() {
struct message msg;
key_t key = 1234;
int msgid = msgget(key, 0666 | IPC_CREAT);
printf("Enter a string: ");
scanf("%s", msg.text);
char original[100];
strcpy(original, msg.text);
msg.type = 1;
// Send string
msgsnd(msgid, &msg, sizeof(msg.text), 0);
// Receive reversed string
msgrcv(msgid, &msg, sizeof(msg.text), 2, 0);
printf("Reversed String: %s\n", msg.text);
if (strcmp(original, msg.text) == 0)
printf("Palindrome\n");
else
printf("Not Palindrome\n");
// Remove message queue
msgctl(msgid, IPC_RMID, NULL);
return 0;
}
--------------------------------------------------------------
PROGRAM 2: receiver.c
--------------------------------------------------------------
#include <stdio.h>
#include <string.h>
#include <sys/ipc.h>
#include <sys/msg.h>
struct message {
long type;
char text[100];
};
int main() {
struct message msg;
key_t key = 1234;
int msgid = msgget(key, 0666);
// Receive message
msgrcv(msgid, &msg, sizeof(msg.text), 1, 0);
printf("Received String: %s\n", msg.text);
int len = strlen(msg.text);
char rev[100];
for (int i = 0; i < len; i++) {
rev[i] = msg.text[len - i - 1];
}
rev[len] = '\0';
strcpy(msg.text, rev);
msg.type = 2;
// Send reversed string back
msgsnd(msgid, &msg, sizeof(msg.text), 0);
return 0;
}
--------------------------------------------------------------
==============================================================
[Prev: Exp 06] | [Next: Exp 08]
==============================================================