mmap()返回-1(MAP_FAILED),Invalid argument

文章介绍了在Linux下使用mmap进行进程间通信的方法,包括映射内存区域、权限设置和错误检查。作者强调了映射地址offset必须是4K的整数倍这一关键点,并提供了错误处理的示例代码。
摘要由CSDN通过智能技术生成

linux 进程通信之 mmap - 小石王 - 博客园 (cnblogs.com)

1、确定问题方法: 

unsigned char *map_base=(unsigned char * )mmap(NULL, MAP_SIZE, PROT_READ | PROT_WRITE,     MAP_SHARED, dev_fd, RTCPWC_REG_BASE );
    if(map_base== MAP_FAILED)
    {
           LOGI("errno=%d\n",errno); 
        char * mesg = strerror(errno);
           LOGI("Mesg:%s\n",mesg);
        LOGI("map_base%x",map_base);
    }

2、发现offset必须是4K的整数倍,【0,4*1024】,解决。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
mmap()函数在创建映射区时可能会出现错误。根据引用\[1\]中的代码,报错的原因可能是在调用mmap()函数时传入了无效的参数。具体来说,可能是传入的文件描述符(a->fd)无效或者请求的虚拟地址(a->requested_va)无效。这可能是由于文件描述符无效或者请求的虚拟地址不符合要求导致的。 引用\[2\]中提到了一些关于mmap()函数的注意事项。其中,注意事项2指出当使用MAP_SHARED标志时,映射区的权限应该小于等于文件打开的权限。而使用MAP_PRIVATE标志则没有这个限制。注意事项3指出映射区的释放与文件关闭无关,即映射区建立成功后,文件可以立即关闭。注意事项4提到了当映射文件大小为0时,无法创建映射区。因此,用于映射的文件必须有实际大小。 引用\[3\]中提到了一个可能导致mmap()函数失败的原因。如果映射的文件所属的文件系统是网络上的文件,Linux无法保证文件的一致性。这时,MAP_SHARED所要求的语义就无法满足。如果只需要在内存上操作而不需要将内存刷新回文件,可以使用MAP_PRIVATE模式。但如果需要保证强一致性要求,就必须使用MAP_SHARED模式。 综上所述,mmap()函数失败的原因可能是传入了无效的参数,如无效的文件描述符或请求的虚拟地址。此外,还可能是由于文件所属的文件系统是网络上的文件,无法满足MAP_SHARED的要求。 #### 引用[.reference_title] - *1* [mmap()报Invalid argument的错误](https://blog.csdn.net/choumin/article/details/122539286)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [【unix系统编程】mmap创建映射区,提示mmap:invalid argument!](https://blog.csdn.net/m0_57168310/article/details/129785825)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [mmap报错Invalid argument的解决办法](https://blog.csdn.net/zgl07/article/details/8866987)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值