当前位置: 首页 > 面试题库 >

读写mmap的参数无效?

商天逸
2023-03-14
问题内容

-EINVAL由于某种原因而得到,但我不清楚为什么。这是我打开并尝试访问mmap文件的位置:

if ((fd = open(argv[1], O_RDWR)) < 0)
{
    fprintf(stderr, "Failed to open %s: %s\n", argv[1], strerror(errno));
    return 1;
}

struct stat statbuf;
if (fstat(fd, &statbuf))
{
    fprintf(stderr, "stat filed: %s\n", strerror(errno));
    return 1;
}

char* fbase = mmap(NULL, statbuf.st_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
if (fbase == MAP_FAILED)
{
    fprintf(stderr, "mmap failed: %s\n", strerror(errno));
    return 1;
}

编辑:我应该添加,该错误发生在中mmap


问题答案:

原来将更 MAP_SHARED改为 MAP_PRIVATE可以使此操作成功。

失败的原因很微妙:我的代码正在VirtualBox
VM内运行,而我试图的文件mmap位于主机上的共享目录中。显然,VirtualBox虚拟文件系统无法mmap使用MAP_SHARED跨虚拟机管理程序边界的选项来实现。

如果您在我的问题和他的回答上都读到jxh的有用评论,那么事实证明该代码对他有用,因为他可能正在尝试将mmap主机文件系统文件放入主机内存中。

我观察到从切换MAP_SHAREDMAP_PRIVATE也是与此一致:由于私有映射的内存对于其他进程是不可见的,因此虚拟文件系统驱动程序可能不会反对映射内存。

解决方案是将我要映射的文件移动到来宾的硬盘中,然后从那里进行操作。



 类似资料:
  • 我想设置一个新的批处理作业。 这个作业应该从Rest接口接收一些参数(我正在使用@EnableBatchProcessing进行自动作业扫描)。 我只希望在每次Rest通话中执行一次任务- 我的另一个想法是创建一个ItemReader,它读取JobParameters并创建一个域对象(从参数中),然后处理数据并写入一个虚拟ItemWriter。 我试着这样设置ItemReader: 我试着用这样的

  • mmap(建立内存映射) 相关函数 munmap,open 表头文件 #include <unistd.h> #include <sys/mman.h> 定义函数 void *mmap(void *start,size_t length,int prot,int flags,int fd,off_t offsize); 函数说明 mmap()用来将某个文件内容映射到内存中,对该内存区域的存取即是直

  • mmap 建立内存映射 相关函数 munmap,open 表头文件 #include <unistd.h> #include <sys/mman.h> 定义函数 void *mmap(void *start, size_t length, int prot, int flags, int fd, off_t offsize); 函数说明 mmap()用来将某个文件内容映射

  • 问题内容: 所以我有这段代码: 最初我是正常人,但是我更改为这个,因为我认为这可能是标题问题。但是我仍然没有检测,我也没有。但是,它正在接收数据。 知道有什么问题吗? 编辑 好吧,我想我知道怎么了。它将其作为json对象发布,因此只能在php:// input中读取。如何在axios中将其更改为普通字符串? 问题答案: 从文档中(我没有在引用的材料中保留链接): 默认情况下,axios将JavaS

  • 问题内容: 我正在通过https://www.digitalocean.com/community/tutorials/how-to-serv-django- applications-with-uwsgi-and-nginx-on- ubuntu-16-04进行 工作。我已经完成测试,但出现502错误。 我的nginx服务器块配置文件: nginx错误日志显示: 在我看来,uwsgi运行正常:

  • 我在使用IntelliJ IDEA 2020.2时启用了检查“@NotNull/@Nullable problems”。在编写自定义ThreadFactory时,我在的参数上收到IntelliJ IDEA检查警告“Not annotated parameter overrides@NotNull parameter”: 爪哇。util。同时发生的ThreadFactory接口不注释。IDEA的代码