// Experiment 21(ii): Inter-Process Communication using SHARED MEMORY
// WRITER program
// Compile: gcc 21b_shared_mem_writer.c -o shmwriter
// Run    : ./shmwriter    (then ./shmreader in another terminal)

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

#define SHM_SIZE 1024

int main() {
    key_t key = ftok("shmfile", 75);

    int shmid = shmget(key, SHM_SIZE, 0666 | IPC_CREAT);
    if (shmid < 0) { perror("shmget"); exit(1); }

    // Attach shared memory to our address space
    char *str = (char*) shmat(shmid, (void*)0, 0);
    if (str == (char*)-1) { perror("shmat"); exit(1); }

    printf("Write data into shared memory: ");
    if (fgets(str, SHM_SIZE, stdin) == NULL) return 1;
    str[strcspn(str, "\n")] = '\0';

    printf("Data written: %s\n", str);
    printf("(now run ./shmreader in another terminal)\n");

    // Detach (but don't delete -- reader still needs it)
    shmdt(str);
    return 0;
}
