Linux 文件映射mmap,Bus Error

bug: mmap 没理解好导致的Bus error (core dumped) Bus error (core dumped)  gdb: Program received signal SIGBUS, Bus error. 0x00000000004027c0 in MyTask::finish_the_work (this=0x7fffffffd7c0) at task.cc:233 233 p_w[i]=data_[i]; (gdb) ... 阅读详情

当创建一个普通文件,然后映射到虚拟地址空间,出现bus error,代码如下:

复制代码
代码
1 #define FILE_LENGTH 0x1000 2 int fd = open("test", O_RDWR | O_CREAT); 3 char *fm = (char*)mmap(NULL, FILE_LENGTH, MAP_READ | MAP_WRITE, MS_PRIVATE, fd, 0); 4 if (fm == MAP_FAILED) 5 { 6   prror("mmap\n"); 7   exit(EXIT_FAILAURE); 8 } 9 close(fd); 10 strcpy(fm, "this is a test");
复制代码

 当运行第10行后,系统报错:bus error。因为这时文件还是空的,所以不能写内容,解决办法是在第2行后插入如下代码:

lseek(fd, FILE_LENGTH, SEEK_SET);
write(fd, " ", 1);   //这句一定要,否则文件还是空的,只是位置移到FILE_LENGTH处

这样就搞定了。

mmap的 Bus error问题及解决 前言 新交易系统中,通过mmap来实现持仓和订单的本地持久化,之前未用过mmap,在本次实现中遇到了一些问题,仅记录Bus error问题; 实现 基本逻辑 OM或者PM在启动时,先通过本地的持久化文件来恢复订单或者持仓: 如果是当日的第一次的正常启动,那么是没有持久化文件的,这个时候,PM需要从别的地方来获取初始化的持仓(当天还没有开始交易,没有订单,OM不需要做处理); 如果不是当天的第一次正常启动,那么是有持久化文件的,OM或者PM就需要从本地的持久化文件来获取订单和持仓,完成初始化; 问题 持久 阅读详情

相关推荐

进程间通信笔记(8)—mmap详解

linux mmap详解

上善若水 4446

memset(addr , 0 , size) 导致Bus error问题分析

memset 0 失败

lunhui2016的博客 2897

mmap发生Bus error

在项目中出现了一些问题,通过内存映射的时候发生了Bus error。 在网上看了很多会出现这个问题的讨论。通过哥用各种方法尝试,发现这里有很多的地方需要进行思考。这里出现的错误,映射的一些问题,映射的大小,页面的整数倍。 还有就是利用利用两个连续的地址映射的时候,如果大小不合适就会出现一些不好的地方。大了肯定出现段错误, 小了不能全部填充,这里会出现NULL。在内存区域中,一些随机的数据。 到

道亦无名 5647

linux mmap简介及bus error的解决方案

无亲缘关系的两进程之间,使用mmap共享内存进行通信,出现bus error。 MMap 通信机制简介 关于mmap      mmap将一个文件或者其它对象映射进内存。文件被映射到多个页上,如果文件的大小不是所有页的大小之和,最后一个页不被使用的空间将会清零。munmap执行相反的操作,删除特定地址区域的对象映射。 当使用mmap映射文件到进程后,就可以直

上善若水 1万+

skill使用教程,从小白到大神进阶

(2)突然无法使用(NodeJS安装参考):如果正常使用中,突然发现claude命令无法启动claude-code了,可能是claude-code正在后台自动更新,等待几分钟后再尝试使用,如果还是不行,请先运行下列代码移除claude-code,注意,如果你的node安装目录不同,要替换成自己的安装目录:rm -rf /opt/homebrew/lib/node_modules/@anthropic-ai/claude-code。安装完成后,让我们启动 Claude Code,看看它长什么样。

weixin_45036829的博客 2010

OpenHarmony实战开发-如何实现文件分布式同步编辑

在分布式文件场景中,分布式设备管理包含了分布式设备搜索、分布式设备列表弹窗、远端设备拉起三部分。首先在分布式组网内搜索设备,然后把设备展示到分布式设备列表弹窗中,最后根据用户的选择拉起远端设备。两台设备组网的分布式场景是工作中常常需要的。这样的分布式场景有助于加快工作效率,减少工作中的冗余,本例将为大家介绍如何实现上述功能。​ (2)订阅分布式数据变化:通过this.distributedObject.on(‘status’, this.statusCallback)监听分布式数据对象的变更。

2401_82546228的博客 751

linux通过mmap映射本地文件来实现的,遇到了Bus error的问题,这个本地文件必须有数据

linux通过mmap映射本地文件来实现的,遇到了Bus error的问题,这个本地文件必须有数据,有就是说这个映射本地文件大小必须大于0; 参考:mmap的 Bus error问题及解决_lqw198421的博客-优快云博客

lk12306的博客 764

宇树G1嵌入式软件架构及技术实现

该架构通过硬件加速(FPGA)+确定性调度(RTX5)的组合,在1ms控制周期内完成从传感器采集到43轴输出的全链路处理,相比波士顿动力系统缩短40%的着地稳定时间。,结合ARM Cortex-R5与FPGA的异构计算能力,实现43自由度1kHz实时控制。

m0_60674045的博客 4311

mmap后memset(addr , 0 , size) 导致Bus error问题分析

考虑到val为非0,不会出现Bus error,怀疑是glibc的memset,对val为0而且cout > 0x100的操作做了特殊的处理,查看glibc的源码,发现如果set的val,如果等于0,确实会做不同的操作,执行了dc zva指令,这解释了为什么非0的val会没问题,且size<0x100,也不会出现Bus error。以上是转自博客的内容,当时我在自己的板子上也遇到一样的问题,打开/dev/mem进行mmap,要映射的地址在设备树是预留内存,通过gdb分析,发现程序停在dc zva指令。

weixin_57301565的博客 602

银河麒麟V10安装docker

最近在做的一个信创项目使用的操作系统是银河麒麟高级服务器V10,在安装docker时,会遇到下面的错误。 nothing provides fuse-overlayfs >= 0.7 needed by docker-ce-rootless-extras-20.10.0-3.el7.x86_64 经过分析,以下依赖包是centos系统中的包,所以需要给kylinos创建一个合适的centos源。经过实验,Kylin Linux Advanced Server V1

m0_38004228的博客 4908

吃透 AM32 无人机电调:从源码架构到工作原理的全方位解析(附实践指南)(上)

本文深入解析了AM32电调固件的源码架构与核心模块实现。文章首先介绍了AM32电调作为开源无人机;动力心脏的重要地位,随后从硬件基础、源码目录、模块划分三个维度构建解析框架。重点剖析了系统初始化模块的时钟配置、GPIO初始化和定时器设置,以及FOC控制模块的坐标变换算法、角度估算和SVPWM生成等关键技术实现。通过逐行代码解析,揭示了电调如何将飞控指令转换为电机驱动的完整过程,为开发者理解AM32电调工作原理提供了系统性指导。

bother3000的博客 6562

linux mmap bus error

#include "stdio.h" #include "sys/types.h" #include "sys/stat.h" #include "fcntl.h" #include "sys/mman.h" #include "unistd.h" #include "string.h" //test mmap with bus error typedef stru

fevershen的专栏 1064

用deepseek对GPU服务器进行压力测试

利用 DeepSeek 模型对 GPU 服务器进行压力测试,核心思路是通过,验证 GPU 服务器在计算、显存、网络等维度的承载能力,同时观察稳定性与性能瓶颈。

weixin_42795092的博客 1610

linux对空文件mmap后的Bus Error问题

准备写一个EMMC测速程序,在写完后得到Bus Error错误。 错误源代码如下,使用 O_CREAT参数创建一个新的文件。 #include <stdint.h> #include <stdio.h> #include <unistd.h> #include <sys/mman.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #defin

socbis的博客 995

华为OD机试 - 猴子吃桃 - 二分查找(Java 新系统 100分)

每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天优快云在线答疑。

学Java,找哪吒 3850

基于STM32、HAL库的WF162A 11BA T&R气压传感器 驱动程序设计

/ 转换为7位地址。* @param temperature: 存储读取到的温度值(°C)* @param temperature: 存储读取到的温度值(°C)* @param pressure: 存储读取到的压力值(bar)* @param pressure: 存储读取到的压力值(bar)* @param range: 压力范围(bar)

corlin6688的博客 361

linux+mmap父子通信_Linux 进程间通信 -- 文件mmap映射

Linux 进程间通信 -- 文件mmap映射打开一个文件, 并且指定文件中的一个区域, 映射到内存中, 然后直接操作那个内存, 就能实现进程间通信!!!因为是内存操作, 所以速度是最快的.使用mmap进程通信速度是最快的.函数mmap:打开一个文件,指定一个文件的区域,作为一个区域,映射到内存中,以后就直接操作那个内存,就能够实现进程间的通信。因为是内存操作,所以速度最快。#include vo...

weixin_35282584的博客 168

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

linux java bus error,linux mmap简介及bus error的解决方案

// Arthur: zhangxiao// Data: 2014/12/24// Note: mmap write/*******************/#include #include #include #include #include #include #include #include //#define FILENAME "/home/zhangxiao/embededSystem...

weixin_35066076的博客 666

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

linux 进程通信之 mmap

一,管道PIPE 二,FIFO通信 三,mmap通信 创建内存映射区。 #include <sys/mman.h> void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset); int mmap(void *addr, size_t length); 函数mmap:打开一个文件,指定一个文件的区域,作为一个区域,映射到内存中,以后就直接操作那个内存,就能够实现进程间的通信。因为是

zhangge3663的博客 636

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

linux内存分区运行程序,linux mmap从用户空间应用程序访问PCI内存区域

作为我的PCI驱动程序的第一级测试,我希望我可以通过/sys/bus/pci/devices/0000:01:00.0/resource0访问pci_iomap区域来自我的用户应用程序的文mmap的手册页,我找到的示例程序以及其他帖子似乎表明用户进程访问应该有效.但是有些文章似乎表明mmap调用需要通过ioctl访问器在内核中完成.我的问题是PCI sysfs资源文件的mmap()应该来自应用程序...

weixin_35126737的博客 567

Linux: WSL mmap时报错:Bad file descriptor, Exec format error。 解决方法是加flags加MAP_ANON属性。

WSL mmap时报错:Bad file descriptor, Exec format error。同样的代码在虚拟机中会出现bus error core dump错误。 解决方法一是先在要映射的文件中通过vi写入字符。 解决方法二是加flags加MAP_ANON属性,使用匿名映射。

katerdaisy的博客 1140

ubuntu下一个头文件引发的mmap段错误(Segfault)

最近要开发一个项目,用到了内存映射mmap机制,于是自己在Ubuntu下先写了一个测试的小程序,由于测试代码是从网上摘抄更改的,出现了一个头文件的问题,这两天搞的自己心情相当的郁闷,都已经开始严重怀疑这个世界了,当得知是头文件出错时,心里更是五味杂瓶,感觉生活欺骗了自己一样,代码如下: 驱动代码: /* * Maxim (Dallas) MAX3107/8/9, MAX14830 ser...

jxhln的博客 1468

C++内存对齐原理与Bus Error排查实战指南

内存对齐是计算机系统中提升数据访问效率的关键机制,它要求数据在内存中的起始地址满足特定字节倍数的约束。其核心原理源于CPU与内存之间通过数据总线进行高效通信的硬件设计,未对齐的访问可能导致需要多个总线周期,甚至在某些架构上触发硬件异常。从技术价值看,正确的内存对齐能显著提升程序性能,避免潜在的运行时错误。这一概念在涉及底层内存操作、硬件交互和高性能计算的场景中尤为重要,例如系统编程、嵌入式开发和游戏引擎开发。本文聚焦于C++开发中因未对齐内存访问引发的Bus Error问题,通过分析指针强制转换、结构体访问

anchang7456的博客 323

由mmap引发的SIGBUS

一直以来都觉得使用mmap读文件是非常高效、非常优雅的做法(参见《从"read"看系统调用的耗时》)。mmap之后,就可以通过内存访问的方式访问到文件里的内容,省去了read这样的系统调用。 却不曾想过,mmap以后,如果读文件出错会发生什么…… 今晚看到一篇介绍apache bug的文章,里面说到,apache使用mmap来实现对静态文件的访问。在读文件之前,apache使用st...

weixin_30849403的博客 122

X86 Linux 下 SIGBUS 总结

SIGBUS 在 x86 Linux 上并不多见,但一旦出现,其调用堆栈常常让人摸不着头脑,加之信号问题各平台系统间差异较大,更让人难以理清,这里稍微总结一下 x86 Linux 上大概有哪些情形会触发 BUS ERROR. 文件映射访问异常 这是 SIGBUS 在用户态最为常见的场景,也最容易触发,通常来说根本原因都是进程 mmap 了一个文件后,另外的进程把这个文件截断了,导致 mmap 出来...

weixin_34279061的博客 997
上一篇: errno的一些错误定义
下一篇: char a[0]
B_Dogs881221
博客等级 码龄15年 15粉丝 16原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值