728x90
반응형
[IPC] 메모리 맵 mmap() 예제 코드
- 메모리 맵은 파일과 메모리를 직접 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 |