Advertisement
Guest User

Untitled

a guest
Jun 19th, 2019
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.25 KB | None | 0 0
  1. #include "sys/mman.h"
  2. #include "stdio.h"
  3. #include "assert.h"
  4. #include "unistd.h"
  5. #include "fcntl.h"
  6. #define NAME "/shm"
  7. #define SIZE 1024
  8.  
  9. void getSHM(int* fd, int** shm_object, int size)
  10. {
  11. if((*fd = shm_open(NAME, O_CREAT, 0)) == -1)
  12. {
  13. assert(0 && "Opening object failed!");
  14. }
  15.  
  16. if((*shm_object = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, *fd, 0)) == NULL)
  17. {
  18. assert(0 && "Mapping failed");
  19. }
  20. }
  21.  
  22. int main ()
  23. {
  24. int* shm_object;
  25. int fd;
  26.  
  27. pid_t pid = fork();
  28.  
  29. if(pid)
  30. {
  31. getSHM(&fd, &shm_object, sizeof(int) * SIZE);
  32. int my_pid = (int)getpid();
  33. printf("Writing to SHM, my PID is : %d\n", my_pid);
  34.  
  35. for(int i = 0; i < SIZE; i++)
  36. {
  37.  
  38. shm_object[i] = i;
  39. }
  40. printf("Finished writing\n");
  41. }
  42. else
  43. {
  44. getSHM(&fd, &shm_object, sizeof(int) * SIZE);
  45. sleep(10);
  46. printf("Reading from SHM,\n");
  47. for(int i = 0; i < SIZE; i++)
  48. {
  49. if(shm_object[i] != i)
  50. {
  51. printf("Found %d, expected %d\n", shm_object[i], i);
  52. assert(0);
  53. }
  54. }
  55. printf("All good!\n");
  56. }
  57.  
  58. return 0;
  59. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement