2016-11-21 8 views
0

어떻게 mmap을 사용하여 가상 램 디스크 내의 메모리를 예약 할 수 있습니까? 내가 할 수있는 말 :가상 램 디스크 내의 mmap 만들기

mkdir /mnt/ramdisk 
mount -t tmpfs -o size=10m tmpfs /mnt/ramdisk 

나는 이제 가상 램 디스크를 가지고 있는데, 어떻게 C 프로그램 내에서 그걸 맵핑합니까?

int main() { 
    // .... 
    addr = mmap(/* ramdisk address? */, size, PROT_READ_WRITE, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0); 
+0

RAM 디스크를 사용하고 있다면 'mmap'을 사용하면 오버 헤드가 발생합니다. 왜 'fopen'을 쓰지 않는가? – Dai

+0

@Dai mmap을 사용하여 라이브러리의 메모리 영역을 예약하는 방법으로 mmap을 제공하는 대신 ramdisk 내에서이 메모리를 예약하려는 경우 어떻게해야 할 지 잘 모르겠습니다. 주소 힌트가 'NULL'인 값 –

답변

0

/mnt/ramdisk이 tmpfs라는 사실은 사용 방법에 아무런 영향을 미치지 않습니다.

해당 장치에서 파일을 메모리 맵핑하려면 파일이 open()이고 MAP_FILE이 아닌 파일 (MAP_ANONYMOUS)으로 매핑하면됩니다. 주소를 전달하지 마십시오. 적절한 하나가 선택 될 것입니다.

+0

직접 메모리 액세스를 위해 램 디스크를 사용할 수 있습니까? '/ mnt/ramdisk'와 같은 디렉토리에서 open()을 호출 할 수 없습니다. –

+1

아니요. 의미가 tmpfs이기 때문에 변경되지 않습니다. 다른 파일 시스템과 똑같이 동작합니다. – duskwuff