writer.cpp :
#include <iostream>
#include <fcntl.h>
#include <sys/mman.h>
#include <unistd.h>
#include <cstring>
struct Person {
char name[50];
int age;
char gender;
};
int main() {
const char* shared_memory_name = "/shared_memory";
const int shared_memory_size = sizeof(Person);
int shm_fd = shm_open(shared_memory_name, O_CREAT | O_RDWR, 0666);
ftruncate(shm_fd, shared_memory_size);
Person* shared_data = static_cast<Person*>(mmap(nullptr, shared_memory_size, PROT_WRITE | PROT_READ, MAP_SHARED, shm_fd, 0));
while (true) {
std::cout << "Enter name: ";
std::cin.getline(shared_data->name, 50);
std::cout << "Enter age: ";
std::cin >> shared_data->age;
std::cin.ignore();
std::cout << "Enter gender (M/F): ";
std::cin >> shared_data->gender;
std::cin.ignore();
std::cout << "Data written to shared memory: " << shared_data->name << ", "
<< shared_data->age << ", " << shared_data->gender << std::endl;
sleep(1);
}
munmap(shared_data, shared_memory_size);
shm_unlink(shared_memory_name);
return 0;
}
reader.cpp
#include <iostream>
#include <fcntl.h>
#include <sys/mman.h>
#include <unistd.h>
struct Person {
char name[50];
int age;
char gender;
};
int main() {
const char* shared_memory_name = "/shared_memory";
const int shared_memory_size = sizeof(Person);
int shm_fd = shm_open(shared_memory_name, O_RDWR, 0666);
Person* shared_data = static_cast<Person*>(mmap(nullptr, shared_memory_size, PROT_READ | PROT_WRITE, MAP_SHARED, shm_fd, 0));
while (true) {
std::cout << "Read from shared memory: "
<< "Name: " << shared_data->name << ", "
<< "Age: " << shared_data->age << ", "
<< "Gender: " << shared_data->gender << std::endl;
sleep(1);
}
munmap(shared_data, shared_memory_size);
return 0;
}
Result
