Erreur ENODEV dans MMAP

J’essaie de faire un mappage simple d’un nouveau fichier texte (donné en tant que paramètre) et j’obtiens une erreur ENODEV dans l’appel mmap. Le fd est ok (pas d’erreur dans l’appel ouvert).

Selon la documentation, cette erreur signifie “Le système de fichiers sous-jacent du fichier spécifié ne prend pas en charge le mappage de la mémoire”. ou d’une autre source, cela signifie que fd est un descripteur de fichier pour un fichier spécial (pouvant être utilisé pour mapper une mémoire d’entrée / sortie ou un périphérique). Je ne comprends pas pourquoi aucune de ces raisons serait le cas.

#include  #include  #include  #include  #include  #include  #include  #include  #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; } 

Cette ligne est cassée:

if(fd = open(argv[1], O_RDWR | O_CREAT | O_TRUNC, mode) == -1){

Vous devez append des parenthèses autour de l’affectation, car l’opérateur de comparaison == a une priorité plus élevée que l’opérateur d’affectation = . Essayez ceci à la place:

if ((fd = open(argv[1], O_CREAT | O_TRUNC, mode)) == -1) {