// Experiment 21(i): Inter-Process Communication using MESSAGE QUEUE
// SENDER program
// Compile: gcc 21a_msg_queue_sender.c -o msgsender
// Run    : ./msgsender
// Then in another terminal run ./msgreceiver

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ipc.h>
#include <sys/msg.h>

struct msg_buffer {
    long  msg_type;
    char  msg_text[100];
};

int main() {
    key_t key = ftok("progfile", 65);     // unique key

    int msgid = msgget(key, 0666 | IPC_CREAT);
    if (msgid < 0) { perror("msgget"); exit(1); }

    struct msg_buffer message;
    message.msg_type = 1;

    printf("Enter a message to send: ");
    if (fgets(message.msg_text, sizeof(message.msg_text), stdin) == NULL) return 1;
    message.msg_text[strcspn(message.msg_text, "\n")] = '\0';

    if (msgsnd(msgid, &message, sizeof(message.msg_text), 0) < 0) {
        perror("msgsnd"); exit(1);
    }
    printf("Message sent: %s\n", message.msg_text);
    return 0;
}
