使用 mmap 函数进行共享内存映射时失败

使用 mmap 函数进行共享内存映射时失败

问:使用 shm_open 函数创建共享内存设备文件,shm_open 函数返回一个文件描述符,然后使用 mmap 函数映射该共享内存到进程的虚拟空间内,mmap 函数返回一个虚拟地址,之后便可以通过这个虚拟地址对共享内存进行读和写操作。
      但是使用 shm_open 创建文件后,使用 mmap 函数进行映射会出现下图中的错误。


答:如果一个文件的数据长度为 0,则不能使用 mmap 建立映射,此时使用 mmap 函数将会失败。对于共享内存设备上的文件,不能保证在所有的系统中都能够使用 write 函数( SylixOS 中使用 write 函数操作内存设备上的文件将直接返回错误)为了更好的可移植性,在创建文件后,可以使用 ftruncate 函数调整文件大小。 ftruncate 函数的使用参考上图 20 行位置注释掉的代码实现。

    • Related Articles

    • RealEvo-QtSylixOS 使用手册

      RealEvo-QtSylixOS 使用手册 详见:RealEvo-IDE (SylixOS IDE)安装目录如:F:\ACOINFO\RealEvo\doc 中 doc 文件夹下的 《RealEvo-QtSylixOS使用手册》 公开链接:SylixOS 手册获取
    • HTTPS 中间件使用手册

      1. 适用范围 本文档主要用于指导 sylixos 设备使用 libcurl 及 libopenssl 实现 https 网址等访问。 2. 原理概述 curl 作为一个使用 URL 语法实现文件传输的工具,其本身支持多种通信协议,其中就包含 http 及 https,而 https 的支持需要 openssl 来辅助保证安全通信要求。 3. 准备工作 3.1 网络环境准备 https 中间件主要用于嵌入式设备与公网网站或 IP 地址的访问及交互,因此在使用 https ...
    • RealEvo-Simulator 使用手册

      RealEvo-Simulator 使用手册 详见:RealEvo-IDE (SylixOS IDE)安装目录如:F:\ACOINFO\RealEvo\doc 中 doc 文件夹下的 《RealEvo-Simulator使用手册》 公开链接:SylixOS 手册获取
    • SylixOS lite 版—基于 STM32F767 资源使用情况

      1、基本概念     代码段(text):顾名思义,代码存放的位置,在 STM32 中代码段一般存放于内置 FLASH 中; 已初始化数据段(data):已初始化数据段会分别体现在 FlASH 中和 RAM 中。因为是全局变量,运行过程中需要进行读写操作,因此占用一段 RAM 空间。又因为有初始值,其初始值需要占用 FlASH 空间。   未初始化的数据段(bss):bss 与 data 相同的地方时它也是全局变量,运行过程中需要进行读写操作,因此占用一段 RAM ...
    • RealEvo-IDE 使用手册

      RealEvo-IDE 使用手册 详见:RealEvo-IDE (SylixOS IDE)安装目录如:F:\ACOINFO\RealEvo\doc 中 doc 文件夹下的 《RealEvo-IDE使用手册》 公开链接:SylixOS 手册获取 更多 IDE 配置见: 参考文章:RealEvo-IDE 获取地址 参考文章:IDE 窗口布局介绍 参考文章:IDE 中如何高亮变量 参考文章:IDE 中如何按列编辑 参考文章:IDE 中如何显示特殊字符 参考文章:IDE 中如何屏蔽单个工程文件 ...