首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mmap和mmap64之间有什么区别吗?

mmap和mmap64之间有什么区别吗?
EN

Stack Overflow用户
提问于 2019-12-23 10:17:34
回答 2查看 1.8K关注 0票数 2

在64位机器上,mmapmmap64之间有什么区别吗?

还有其他的,比如fstat64fstat

答:在64位Ubuntu18LTS上,验证了mmap和mmap64 func addr是相同的.off_t和off64_t是64位.

可以返回>2 GiB文件大小的fstat/stat。

代码:

代码语言:javascript
复制
#include <sys/mman.h>
#include <sys/stat.h>
#include <iostream>
using namespace std;

int main(){
    cout << sizeof(off_t) << endl;

    void* a = (void*)&mmap64;
    void * b = (void*)&mmap;
    cout <<  (a ==b) << endl; // same addr 

    a = (void*)&fstat64;
    b = (void*)&fstat;
    cout << (a==b) << endl; // diff addr but able to return > 2 GiB size
 }
EN

回答 2

Stack Overflow用户

发布于 2019-12-23 11:20:16

在64位机器上,mmap和mmap64之间有什么区别吗?

没有。

引入了*64接口,以便在32位系统上启用大型文件支持。它对64位系统没有影响。

然而,64位接口实际上并没有直接向用户公开(不是POSIX部分)。因此,您不应该直接使用*64接口。如果您碰巧在32位系统上需要它们,那么使用特征测试宏 of glibc (例如,_FILE_OFFSET_BITS)。

宏:_FILE_OFFSET_BITS这个宏决定使用哪个文件系统接口,其中一个替换另一个。而_LARGEFILE64_SOURCE使64位接口作为附加接口可用,而_FILE_OFFSET_BITS则允许64位接口取代旧接口。如果_FILE_OFFSET_BITS未定义,或者定义为32值,则不会发生任何更改。使用32位接口,在32位系统上,像off_t这样的类型具有32位的大小。如果宏被定义为值64,则大型文件接口将替换旧接口。也就是说,函数不能以不同的名称可用(与_LARGEFILE64_SOURCE一样)。相反,旧的函数名现在引用新函数,例如,对fseeko的调用现在确实调用了fseeko64。只有当系统提供处理大型文件的机制时,才应选择此宏。在64位系统上,此宏不起作用,因为*64函数与正常函数相同。这个宏是作为大型文件支持扩展(LFS)的一部分引入的。

票数 3
EN

Stack Overflow用户

发布于 2019-12-23 10:53:29

mmap64()函数与mmap()函数相同,只是它可以用于将大于2G的文件中的内存映射到进程内存中。mmap64()函数是大文件扩展名的一部分。

来自这里

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59453555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档