2016-05-29 1 views
2

Я пытаюсь создать карту памяти с помощью C командыC: ММАП не удалось: Нет такого устройства

void* mem_map = mmap(NULL, 
         sizeof(serverData),  //200000 
         PROT_READ | PROT_WRITE, 
         MAP_SHARED, 
         mem_map_fp, 
         0); 

    if(mem_map == MAP_FAILED){ 
    bail_out(EXIT_FAILURE, "mmap"); 
    } 

Программа компилируется, но при попытке запустить следующую ошибку производится:

mmap: No such device 

Насколько я понимаю, в коде нет ничего плохого, что заставляет меня подозревать, что причина может быть немного сложнее. Я бег этой версии Linux:

Linux ubuntu 4.2.0-16-generiC#19-Ubuntu SMP Thu Oct 8 15:35:06 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux 

ответ

6

Я полагаю, вы пытаетесь выделить память, так что вы должны использовать флаг MAP_ANON или MAP_ANONYMOUS, наряду со стандартными аргументами -1 для дескриптора файла и 0 для смещения , например, так:

mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, -1, 0); 
+0

Нет, цель состоит в том, чтобы создать общую память для использования нескольких процессов, – nitowa

+2

Я думаю, вам просто нужно изменить '' MAP_PRIVATE' к MAP_SHARED' в моем примере то. – sputnik

+0

Это было именно то, чего не хватало, молодцы! – nitowa