在64位机器上,mmap和mmap64之间有什么区别吗?
还有其他的,比如fstat64和fstat。
答:在64位Ubuntu18LTS上,验证了mmap和mmap64 func addr是相同的.off_t和off64_t是64位.
可以返回>2 GiB文件大小的fstat/stat。
代码:
#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
}发布于 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)的一部分引入的。
发布于 2019-12-23 10:53:29
mmap64()函数与mmap()函数相同,只是它可以用于将大于2G的文件中的内存映射到进程内存中。mmap64()函数是大文件扩展名的一部分。
来自这里
https://stackoverflow.com/questions/59453555
复制相似问题