Я пытаюсь сделать простое сопоставление нового текстового файла (заданного как параметр), и я получаю ошибку ENODEV в вызове mmap. Fd в порядке (нет ошибки при открытом вызове).Ошибка ENODEV в MMAP
В соответствии с документацией эта ошибка означает: «Основная файловая система указанного файла не поддерживает сопоставление памяти». или из другого источника, я обнаружил, что это может означать, что fd является файловым дескриптором для специального файла (который может использоваться для отображения I/O или памяти устройства). Я не понимаю, почему любая из этих причин будет иметь место.
#include <sys/mman.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <sys/types.h>
#define SIZE1 10240
int main(int argc, char *argv[]){
char *addr;
int fd;
mode_t mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH;
if(fd = open(argv[1], O_RDWR | O_CREAT | O_TRUNC, mode) == -1){
printf("error @ open\n");
}
addr = (char*) mmap(NULL, SIZE1, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
...
munmap(addr, SIZE1);
return 0;
}
значение argv [1] .. ??? –
Это имя файла, переданное как параметр – ednincer