Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "sys/mman.h"
- #include "stdio.h"
- #include "assert.h"
- #include "unistd.h"
- #include "fcntl.h"
- #define NAME "/shm"
- #define SIZE 1024
- void getSHM(int* fd, int** shm_object, int size)
- {
- if((*fd = shm_open(NAME, O_CREAT, 0)) == -1)
- {
- assert(0 && "Opening object failed!");
- }
- if((*shm_object = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, *fd, 0)) == NULL)
- {
- assert(0 && "Mapping failed");
- }
- }
- int main ()
- {
- int* shm_object;
- int fd;
- pid_t pid = fork();
- if(pid)
- {
- getSHM(&fd, &shm_object, sizeof(int) * SIZE);
- int my_pid = (int)getpid();
- printf("Writing to SHM, my PID is : %d\n", my_pid);
- for(int i = 0; i < SIZE; i++)
- {
- shm_object[i] = i;
- }
- printf("Finished writing\n");
- }
- else
- {
- getSHM(&fd, &shm_object, sizeof(int) * SIZE);
- sleep(10);
- printf("Reading from SHM,\n");
- for(int i = 0; i < SIZE; i++)
- {
- if(shm_object[i] != i)
- {
- printf("Found %d, expected %d\n", shm_object[i], i);
- assert(0);
- }
- }
- printf("All good!\n");
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement