2016-11-21 9 views
0

Как использовать mmap для резервирования памяти в виртуальном ramdisk? Давайте скажем, я:Создать mmap в виртуальном ramdisk

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

Если вы используете RAMdisk, то использование 'mmap' просто вызовет накладные расходы. Почему бы не использовать 'fopen'? – Dai

+0

@Dai Я использую mmap как способ зарезервировать область памяти для моей библиотеки, но я не уверен, как бы я сделал это, если бы захотел зарезервировать эту память в ramdisk, вместо того чтобы предоставить mmap значение 'NULL' для подсказки адреса –

ответ

0

Тот факт, что /mnt/ramdisk является TMPFS не имеет никакого отношения, как вы его используете.

Если вы хотите, чтобы память-карту файл на этом устройстве, вы open() файл и сопоставить его с MAP_FILE (не MAP_ANONYMOUS) так же, как если бы это был обычный файл. Не передавать адрес; для вас будет выбран подходящий вариант.

+0

Но могу ли я использовать этот ramdisk для прямого доступа к памяти? Я не могу просто вызвать open() в каталоге, например '/ mnt/ramdisk' –

+1

№. Семантика не изменяется только потому, что это tmpfs - она ​​ведет себя точно так же, как и любая другая файловая система. – duskwuff

 Смежные вопросы

  • Нет связанных вопросов^_^