#include <stdio.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <unistd.h>
#include <string.h>
int main() {
int shmid;
key_t key = ftok("shmfile", 65);
char *str;
// Create shared memory
shmid = shmget(key, 1024, 0666 | IPC_CREAT);
// Attach shared memory
str = (char*) shmat(shmid, NULL, 0);
if (fork() == 0) {
// Child Process (Reader)
sleep(1); // wait for parent to write
printf("Child Process Reading Data:\n");
printf("Message: %s\n", str);
// Detach
shmdt(str);
} else {
// Parent Process (Writer)
printf("Parent Process Writing Data:\n");
printf("Enter message: ");
fgets(str, 100, stdin);
sleep(2); // ensure child reads after write
// Detach
shmdt(str);
// Delete shared memory
shmctl(shmid, IPC_RMID, NULL);
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzeXMvaXBjLmg+CiNpbmNsdWRlIDxzeXMvc2htLmg+CiNpbmNsdWRlIDx1bmlzdGQuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgoKaW50IG1haW4oKSB7CiAgICBpbnQgc2htaWQ7CiAgICBrZXlfdCBrZXkgPSBmdG9rKCJzaG1maWxlIiwgNjUpOwogICAgY2hhciAqc3RyOwoKICAgIC8vIENyZWF0ZSBzaGFyZWQgbWVtb3J5CiAgICBzaG1pZCA9IHNobWdldChrZXksIDEwMjQsIDA2NjYgfCBJUENfQ1JFQVQpOwoKICAgIC8vIEF0dGFjaCBzaGFyZWQgbWVtb3J5CiAgICBzdHIgPSAoY2hhciopIHNobWF0KHNobWlkLCBOVUxMLCAwKTsKCiAgICBpZiAoZm9yaygpID09IDApIHsKICAgICAgICAvLyBDaGlsZCBQcm9jZXNzIChSZWFkZXIpCiAgICAgICAgc2xlZXAoMSk7ICAvLyB3YWl0IGZvciBwYXJlbnQgdG8gd3JpdGUKICAgICAgICBwcmludGYoIkNoaWxkIFByb2Nlc3MgUmVhZGluZyBEYXRhOlxuIik7CiAgICAgICAgcHJpbnRmKCJNZXNzYWdlOiAlc1xuIiwgc3RyKTsKCiAgICAgICAgLy8gRGV0YWNoCiAgICAgICAgc2htZHQoc3RyKTsKICAgIH0gZWxzZSB7CiAgICAgICAgLy8gUGFyZW50IFByb2Nlc3MgKFdyaXRlcikKICAgICAgICBwcmludGYoIlBhcmVudCBQcm9jZXNzIFdyaXRpbmcgRGF0YTpcbiIpOwogICAgICAgIHByaW50ZigiRW50ZXIgbWVzc2FnZTogIik7CiAgICAgICAgZmdldHMoc3RyLCAxMDAsIHN0ZGluKTsKCiAgICAgICAgc2xlZXAoMik7ICAvLyBlbnN1cmUgY2hpbGQgcmVhZHMgYWZ0ZXIgd3JpdGUKCiAgICAgICAgLy8gRGV0YWNoCiAgICAgICAgc2htZHQoc3RyKTsKCiAgICAgICAgLy8gRGVsZXRlIHNoYXJlZCBtZW1vcnkKICAgICAgICBzaG1jdGwoc2htaWQsIElQQ19STUlELCBOVUxMKTsKICAgIH0KCiAgICByZXR1cm4gMDsKfQ==