免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2159 | 回复: 6
打印 上一主题 下一主题

[Linux] bus error mmap [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-05-05 12:03 |只看该作者 |倒序浏览
各位大侠,小弟最近在学习linux下的编程,在进行一个mmap实验程序的时候,出现了bus error这个错误,百思不得其解,望各位大侠指教:
// receiver.c

#include <stdio.h>
#include <sys/types.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <string.h>

const int SIZE = 100;

void main() {
   int i;
   int fd = open("./block", O_RDWR, 0666);
   if(fd < 0) {
      perror("open failed");
      return;
   }

   //Now map this file to memory
   caddr_t addr = mmap(0, SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
   if(addr <= 0) {
      perror("mmap failed");
      return;
   }

  printf("%s\n",addr);
}
注:这个程序刚开始运行时还好好的,后来改了一下,出现错误,又改回来,就出现bus error了!
运行环境:virtualbox 上的ubuntu13.04

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
2 [报告]
发表于 2013-05-05 12:56 |只看该作者
文件有那么大吗

论坛徽章:
0
3 [报告]
发表于 2013-05-05 14:20 |只看该作者
不是,仅仅是做个试验,用mmap实现两个进程的通信!

论坛徽章:
0
4 [报告]
发表于 2013-05-05 17:14 |只看该作者
加上ftruncate(fd,SIZE);

论坛徽章:
0
5 [报告]
发表于 2013-05-05 21:32 |只看该作者
好的,非常感谢,果然可以。不过还想请教一下,这是什么原因呢,我在网上查,bus error多半是未对齐的原因,那么这里是不是这个原因呢?

论坛徽章:
4
白羊座
日期:2013-09-17 21:59:30技术图书徽章
日期:2013-10-12 22:16:03白羊座
日期:2013-10-14 11:01:40双子座
日期:2013-12-17 18:26:39
6 [报告]
发表于 2013-05-05 23:12 |只看该作者
本帖最后由 井蛙夏虫 于 2013-05-05 23:14 编辑

man mmap只说了一种导致SIGBUS的情况:
"Use of a mapped region can result in these signals:
SIGBUS:Attempted access to a portion of the buffer that does not correspond to the file."
可能是你的文件太小了,不足SIZE大小,printf调用访问时导致SIGBUS。

apue中程序14-12的注释也说明了这种情况。

论坛徽章:
0
7 [报告]
发表于 2013-05-06 21:44 |只看该作者
恩,好的,收益匪浅,谢谢了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP