支持64BIT fopen _FILE_OFFSET_BITS
,其实调用是fopen64()
stat实际上调用的stat64.
为什么要用这个宏定义,而不直接将stat的实现到stat64.
因为有些老库还是有的这个结构,如果不保留老的。所有的老库要全部更新,这牵扯到好多第三方更新,兼容性就不够好。
1:_GNU_SOURCE(g++定义了,gcc未定义)
_GNU_SOURCE -->_LARGEFILE64_SOURCE -->__USE_LARGEFILE64
2._LARGEFILE64_SOURCE:-->__USE_LARGEFILE64
3.# if defined __USE_FILE_OFFSET64 && !defined __REDIRECT
__USE_LARGEFILE64
#endif
_FILE_OFFSET_BITS == 64-->__USE_FILE_OFFSET64
g++ -D_FILE_OFFSET_BITS=64 test.c ok
gcc -D_FILE_OFFSET_BITS=64 test.c
gcc -D_FILE_OFFSET_BITS=64 test.c
test.c: In function ‘main’:
test.c:7:4: warning: implicit declaration of function ‘fopen64’; did you mean ‘fopen’? [-Wimplicit-function-declaration]
fp=fopen64("tst.bin","r+");
^~~~~~~
fopen
test.c:7:3: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
fp=fopen64("tst.bin","r+");
gcc -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE test.c ok.
gcc -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE test.c ok.