2006년 11월 3일 금요일

Memory Map

Memory-map은 파일내용을 메모리와 동기화하는 것이다. 예를 들어 mmap.txt에 'Hello, World!'를 저장하면 mmap.txt를 연결한 프로세스의 메모리에 해당 내용이 바뀐다.

#include <sys/types.h>
#include <sys/stat.h>
#include <sys/mman.h>
#include <unistd.h>
#include <fcntl.h>
#include <iostream>
using namespace std;

size_t memsize = 30;

int
main(int,char**)
{
    int fd = open("mmap.txt", O_RDWR|O_CREAT);
    if (0 > fd)
    {
        cerr << "failed to create or open file" << endl;
        return 1;
    }

    char* fp(NULL);

    fp = (char*)mmap(0, memsize, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
    if ( MAP_FAILED == fp )
    {
        cerr << "failed to map memory" << endl;
        return 1;
    }

    cerr << "fp: " << (void*)fp << endl;
    cerr << "write" << endl;

    sprintf(fp, "Hello, world!");

    cerr << "all done." << endl;

    return 0;
}

이렇게 하면 파일에 ;Hello, World'가 들어간다. 그 반대도 마찬가지다.