gcc 4.8.2
#define __USE_FILE_OFFSET64
#define __USE_LARGEFILE64
#include <fcntl.h>
int
main(void) {
int fd = open64("/", O_RDONLY);
return 0;
}
然后gcc的输出是警告:隐式声明函数'open64'[-Wimplicit-function-declaration]&#39;。但是在fcntl.h中:
#ifndef __USE_FILE_OFFSET64
extern int open (const char *__file, int __oflag, ...) __nonnull ((1));
#else
# ifdef __REDIRECT
extern int __REDIRECT (open, (const char *__file, int __oflag, ...), open64)
__nonnull ((1));
# else
# define open open64
# endif
#endif
#ifdef __USE_LARGEFILE64
extern int open64 (const char *__file, int __oflag, ...) __nonnull ((1));
#endif
即使添加了#define __USE_ATFILE,函数openat / openat64也会遇到同样的问题。我不知道发生了什么事。
答案 0 :(得分:5)
LARGEFILE64的正确定义标志是_LARGEFILE64_SOURCE
。 __USE_*
已取消features.h
所有{{1}}次操作。