C MMAP中的ENODEV错误
我试图对一个新的文本文件(作为参数给出)进行简单的映射,但在mmap调用中发现了一个ENODEV错误。fd正常(打开调用中无错误) 根据文档,此错误意味着“指定文件的底层文件系统不支持内存映射”。或者从另一个来源我发现,这可能意味着fd是一个特殊文件的文件描述符(可能用于映射I/O或设备内存)。我不明白为什么会有这些原因C MMAP中的ENODEV错误,c,linux,mmap,C,Linux,Mmap,我试图对一个新的文本文件(作为参数给出)进行简单的映射,但在mmap调用中发现了一个ENODEV错误。fd正常(打开调用中无错误) 根据文档,此错误意味着“指定文件的底层文件系统不支持内存映射”。或者从另一个来源我发现,这可能意味着fd是一个特殊文件的文件描述符(可能用于映射I/O或设备内存)。我不明白为什么会有这些原因 #include <sys/mman.h> #include <sys/stat.h> #include <fcntl.h> #includ
#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;
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#定义大小1 10240
int main(int argc,char*argv[]){
char*addr;
int-fd;
模式=S|u IRUSR | S|u IWUSR | S|u IRGRP | S|IROTH;
如果(fd=打开(argv[1],O|u RDWR | O|u CREAT | O|u TRUNC,模式)=-1){
printf(“错误@open\n”);
}
addr=(char*)mmap(NULL,SIZE1,PROT_READ | PROT_WRITE,MAP_SHARED,fd,0);
...
munmap(地址,尺寸1);
返回0;
}
此行已断开:
if(fd=open(argv[1],O|RDWR | O|u CREAT | O|u TRUNC,mode)=-1){
您需要在赋值周围添加括号,因为比较运算符==
的优先级高于赋值运算符=
。请尝试以下操作:
if((fd=open(argv[1],O|CREAT | O| u TRUNC,mode))=-1{
argv[1]的值…??这是文件名,作为参数传递谢谢,你是对的,我认为fd不是问题,我想如果是这样的话,我会收到一个EACCES或EBADF错误。