태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

MMF(Memory Map File)

Posted 2009/04/24 01:34


댓글 하나가 운영자에겐 커다란 힘이 됩니다!

MMF(Memory Map File)

프로세스의 가상주소 공간을 Disk상에 존재하는 파일과 연결

 

"장점"

1. 파일 작업이 쉽다

2. 속도가 빠르다

3. 버퍼가 필요없다

4. IPC의 대표적 기법

   - 같은 메모리 공간을 공유한다

 

일반적으로 메모리 맵 파일을 사용하는 순서는 아래와 같다.

1. Open the file by calling the CreateFile function.

2. Create File Mapping Object by calling the CreateFileMapping()

3. Creating a File View by calling the MapViewOfFile() of MapViewOfFileEx()

4. Reading and Writing From a File View

5. Destroy all file views in its address space by using the UnmapViewOfFile function

6. Closing a File Mapping Object by Calling the CloseHandle() Function

7. Close a File

 

#include <stdio.h>

#include <windows.h>

 

void main()

{

        // MMF 1단계. 화일 Open 또는 생성

        HANDLE hFile = CreateFile( "a.txt", GENERIC_READ |

                                   GENERIC_WRITE,

                                   FILE_SHARE_READ | FILE_SHARE_WRITE,

                                   0, CREATE_ALWAYS,

                                   FILE_ATTRIBUTE_NORMAL, 0);

 

        // 에러 처리는 생략

 

        // MMF 2단계. 화일 매핑 KO 생성

        HANDLE hMap = CreateFileMapping( hFile, // 연결할 파일.

                            0,     // 매핑 KO보안

                            PAGE_READWRITE,

                            0, 100, // 크기(64 bit, 0이면 화일 전체 크기)

                                    // 0: 하위, 100: 상위 => 100 - 0 :100

                            0);        // KO 이름. 필요없다면 0

 

        // MMF 3단계. 매핑 커널 Object 를 사용해서 화일을 가상주소와 연결.

        char *p = (char*)MapViewOfFile(hMap, FILE_MAP_WRITE, 0,

                                             0, // offset

                                             0); // 크기(매핑 객체의 크기)

 

        if(p == 0)

        {

                printf("Error\n");

        }

        else

        {

                printf("매핑된 주소 : %p\n", p);

                strcpy(p, "hello");  // 결국 파일로 저장된다.

                p[50] = 'a';

        }

 

        UnmapViewOfFile(p);

 

        CloseHandle(hMap);

        CloseHandle(hFile);

}

위의 정보가 도움이 되셨나요? 그렇다면 댓글 하나만 남겨주세요.
댓글 하나가 운영자에겐 커다란 힘이 됩니다!

Write your message and submit
« PREV : 1 : ... 51 : 52 : 53 : 54 : 55 : 56 : 57 : 58 : 59 : ... 432 : NEXT »