최대 1 분 소요

APP간  IPC통신을 하기 위해서 mmap을 사용하는 방법을 확인해 보았습니다.

file을 하나 잡고 memory mapping해서 쓰는건데 흠.. 전 shared memory에 한표를 던지고 싶네요 ^^;

아래 예제 코드는 maker가 mm file을 만들고 메모리 메핑한 후에 파일에 쓴거고..

user는 해당 mm file을 열어서 메모리 맵핑해서 읽는겁니다.

사용법은 간단하나 만약 app 이 파일을 만들어야 하는공간이 root 이면 약간 문제가 생길듯 하네요 ^^;

maker.c

  1. #include
  2. #include
  3. #include
  4. #include
  5. #include
  6. #include <sys/mman.h>
  7. #define FLAG PROT_WRITE PROT_READ
  8. int main()
  9. {
  10. int fd, *pmmap, i;
  11. fd = open(“mm”, O_RDWR O_CREAT, 0666);
  12. if(fd < 0)
  13. {
  14. perror(“open”);
  15. exit(1);
  16. }
  17. ftruncate(fd, 4096);
  18. pmmap = (int *)mmap(0, 4096, FLAG, MAP_SHARED, fd, 0);
  19. if(pmmap <0 )
  20. {
  21. perror(“mmap”);
  22. exit(1);
  23. }
  24. for(i = 0; i < 100; i++)
  25. {
  26. pmmap[i] = i;
  27. }
  28. pmmap[i+1] = -1;
  29. getchar();
  30. munmap(pmmap, 4096);
  31. close(fd);
  32. return 0;
  33. }

user.c

  1. #include
  2. #include <sys/stat.h>
  3. #include <sys/mman.h>
  4. #include
  5. #include
  6. #include
  7. #define FLAG PROT_WRITE PROT_READ
  8. int main(int argc, char **argv)
  9. {
  10. int fd,  i=0, *maped;
  11. if ((fd = open(“mm”, O_RDWR, 0666)) < 0)
  12. {
  13. perror(“File Open Error”);
  14. exit(1);
  15. }
  16. –    if ((maped = (int *) mmap(0, 4096, FLAG, MAP_SHARED, fd, 0)) == -1)
  17. {
  18. perror(“mmap error”);
  19. exit(1);
  20. }
  21. while(1)
  22. {
  23. if (maped[i] == -1) break;
  24. printf(“> %d\n”,maped[i]);
  25. i++;
  26. }
  27. close(fd);
  28. }

ref : https://www.joinc.co.kr/w/Site/system_programing/Book_LSP/ch08_IPC