fd = open(f-6ren">
gpt4 book ai didi

c - 在Windows 64位上用C打开带有 "gnu open"的大文件

转载 作者:行者123 更新时间:2023-11-30 16:41:35 26 4
gpt4 key购买 nike

我正在使用该功能

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 中使用 open 打开大文件的解决方案,那就太好了。

最佳答案

我可能已经找到了解决方案。事实上,Windows 不具有 POSIX 兼容性,这就是问题所在(正如 @Some 程序员家伙提到的。但 open 函数可以完成这项工作。问题来自lseek。我需要做这样的事情:

#ifdef WIN32
#include <io.h>
#endif
...
#ifdef WIN32
#define lseek64 _lseeki64
#else
#define lseek64 lseek
#endif

然后,lseek 的类型为 off_t。但这种类型也是 POSIX 标准的。所以,我做的最后一件事就是用 int64_t 替换所有 off_t

现在工作得很好。

关于c - 在Windows 64位上用C打开带有 "gnu open"的大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46234140/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com