【发布时间】:2018-02-24 07:48:42
【问题描述】:
我正在使用函数
int open (const char *filename, int flags[, mode_t mode])
在我的代码中打开文件。
file->fd = open(filename, O_RDWR | O_BINARY);
if (file->fd == -1) {
perror("cannot open file");
return -1;
}
我的代码在 GNU/linux(64 位)上运行良好,但在 Windows(64 位)上我无法打开大于 4Go 的文件。 我会理解我在 32 位系统上遇到这种问题,但我不明白为什么在 Windows 64 位上会出现这种情况。 我读过documentation 并且有函数open64。但是这个功能是专用于 32 位系统的,这不是我的情况(不要关心 32 位系统)。
我不认为这个主题是一个问题,因为我读过的所有主题都解释了如何使用宏 -D_FILE_OFFSET_BITS=64 或 -D_LARGEFILE_SOURCE=1,但同样适用于 32 位系统。
我也 read 有一个标志:O_LARGEFILE 来做。但显然它是bad practice,因为它应该自动完成。
我被卡住了,我不想更改我的所有代码以使用fopen,所以如果有人有在 Windows 中打开大文件的解决方案,那就太好了。
【问题讨论】:
-
在 Windows 上,您使用的是 Cygwin 还是类似的 POSIX 兼容层?如果你这样做,它是 64 位安装的吗?
-
我不是在 Windows 上编译软件的人,但我相信它是用 mingw 64bits 完成的。
-
MinGW 只不过是移植到 Windows 的 GCC 编译器,它没有 POSIX 兼容层(而
open是一个 POSIX 函数,它在 Windows 中不是标准的)。您可能应该从尝试在 Windows 上构建您的应用程序的人那里获得更多信息。 -
软件编译得很好。它也在运行。
标签: c 32bit-64bit