gpt4 book ai didi

c - MMAP 中的 ENODEV 错误

转载 作者:行者123 更新时间:2023-11-30 18:58:22 27 4
gpt4 key购买 nike

我正在尝试对新文本文件(作为参数给出)进行简单映射,但在 mmap 调用中遇到 ENODEV 错误。 fd 正常(打开调用没有错误)。

根据文档,此错误意味着“指定文件的底层文件系统不支持内存映射”。或者从另一个来源我发现这可能意味着 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;
}

最佳答案

此行已损坏:

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

您需要在赋值两边添加括号,因为比较运算符 == 的优先级高于赋值运算符 =。试试这个:

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

关于c - MMAP 中的 ENODEV 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16909949/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com