프로그래밍/ExampleCode.com

[IPC] 메모리 맵 mmap() 예제 코드

jinkwon.kim 2018. 9. 20. 23:17
728x90
반응형
[IPC] 메모리 맵 mmap() 예제 코드

1. 구조 

  - 메모리 맵은 파일과 메모리를 직접 mapping일 시켜주는 구조로 이루어 져있다. 

  - 자세한 설명은 다음 포스트 참조 

   [프로세스간 통신] IPC(inter process communication) 종류


2. 예제 코드
/* Copyright (C) 
* 2018 - doitnow-man
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* 
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
* 
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
* 
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/mman.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/mman.h>

int main(int argc, char **argv) {
  int fd;
  char *file = NULL;
  struct stat sb;
  int flag = PROT_WRITE | PROT_READ;

  if (argc < 2) {
    fprintf(stderr, "Usage: input\n");
    return 0;
  }

  if ((fd = open(argv[1], O_RDWR|O_CREAT)) < 0) {
    perror("File Open Error");
    return 0;
  }

  if (fstat(fd, &sb) < 0) {
    perror("fstat error");
    return 0;
  }

  file = (char *)malloc(40);

  // mmap를 이용해서 열린 파일을 메모리에 대응시킨다.
  // file은 대응된 주소를 가리키고, file을 이용해서 필요한 작업을
  // 하면 된다.
  if ((file = (char *) mmap(0, 40, flag, MAP_SHARED, fd, 0)) == NULL) {
    perror("mmap error");
    return 0;
  }
  printf("%s\n", file);
  memset(file, 0x00, 40);
  munmap(file, 40);
  close(fd);
  return 0;
}




728x90
반응형

'프로그래밍 > ExampleCode.com' 카테고리의 다른 글

[IPC] shared memory 예제 코드  (5) 2018.09.20
[IPC] pipe 예제 코드  (0) 2018.09.20
[IPC] named pipe 예제 코드  (0) 2018.09.20
[IPC] message queue 예제 코드  (0) 2018.09.20
[fseek] 파일 포인터이동 예제  (0) 2018.08.27