[C++] Shared Memory_Struct

HyoSeok·2024년 9월 30일

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

profile
hola!

0개의 댓글