【问题标题】:Mmap problem -> segfaultMmap 问题 -> 段错误
【发布时间】:2011-05-20 18:43:11
【问题描述】:

我想分享使用 mmap。但是它不起作用,因为我遇到了段错误:

int fdL = open("/dev/zero", O_RDWR | O_CREAT);
int *ligneC = (int *) mmap(0, sizeof (int), PROT_READ | PROT_WRITE, MAP_SHARED, fdL, 0);

*ligneC = 0;

我哪里错了?

【问题讨论】:

  • 您指定了O_CREAT 并且缺少模式;不过,这不是问题,因为我认为/dev/zero 已经存在。这就是你所有的代码吗?
  • 错误来自:*ligneC = 0;我不知道为什么
  • 让我“改写”一下:这就是你所有的代码
  • 不,这是针对学生项目(多进程的矩阵计算),但是对于这一步我必须使用mmap。还有其他方法可以在我的所有进程之间共享变量吗?
  • 我的意思是它不应该失败,其他东西可能已经坏了。

标签: c segmentation-fault mmap


【解决方案1】:

您的代码对我来说很好用。尝试在您的代码中添加一些错误检查。您将知道失败的原因和原因:

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <errno.h>
#include <string.h>

int main(int argc,char*argv[])
{
    int fdL = open("/dev/zero", O_RDWR | O_CREAT);

    if(fdL<0)
    {
        perror("open");
        exit(1);
    }

    int *ligneC = (int *) mmap(0, sizeof (int), PROT_READ | PROT_WRITE, MAP_SHARED, fdL, 0);

    if(ligneC==(int*)-1)
    {
        perror("mmap");
        exit(1);
    }

    *ligneC = 0;
    return 0;
}

【讨论】:

  • 谢谢!我得到:mmap:设备不支持操作(我使用 Mac)
猜你喜欢
  • 2018-06-06
  • 2011-11-29
  • 1970-01-01
  • 2020-06-29
  • 2017-04-18
  • 1970-01-01
  • 2010-12-03
  • 2012-08-08
  • 2018-04-01
相关资源
最近更新 更多