在 C 中寻找过去 2GiB 的最佳方法是什么?
What is the best way to seek past 2GiB in C?
在 C:
中似乎有很多不同的查找方式
fseek()
fsetpos()
fseeko()
lseek()
许多似乎有 *64()
个版本:
fseeko64()
lseek64()
更复杂的是,许多似乎需要宏定义(如 _LARGEFILE64_SOURCE
或 _GNU_SOURCE
)可用或使用 64 位版本。
在 Windows、Linux、Mac、BSD、Solaris 等平台上使用 ANSI C 来保证 64 位 IO 的最简单方法是什么,从什么时候开始有了它每个人都支持 OS?
代码作品需要至少使用以下限制之一::
long
是64位+,那就用fseek()
。
只查找代码由于fread(), fgets(), fscanf(), fgets()
而到过的位置,因此使用fgetpos()
、fsetpos()
。如果文件是文本文件,这是最好的方法。
可以访问依赖于平台的 64 位搜索,例如 lseek64()
。
多个 32 位 fseek()
.
在 rewind()
和 fgetc()/fread()
中使用非常低效的代码。
What is the easiest way to guarantee 64-bit IO using ANSI C on
Windows, Linux, Mac, BSD, Solaris, etc.
最简单的方法?将您的代码编译为 64 位可执行文件。请务必使用正确的类型,例如size_t
是 而不是 而 unsigned int
- size_t
是 size_t
。希望您已经超越了 ANSI C,因为它通常指的是 C89,并且可能不支持 64 位架构。
正如评论中所暗示的那样,没有任何符合 C 标准的方法可以保证您可以轻松超过 2GB。但是,对于 64 位二进制文件,POSIX 兼容的 IO(open()
、read()
、write()
等)都可以作为 size_t
/ ssize_t
POSIX 使用的 IO 是 64 位的。 POSIX 还指定了 fseeko()
and ftello()
,它们是 64 位兼容的。
and since when has it been supported by each OS?
有关详细信息,请参阅 here。粗略地说,"full" 64 位支持日期大约为以下时间:
- 索拉里斯:1998
- Linux: 2003
- Windows: 2006
- OS X: 2007
在 C:
中似乎有很多不同的查找方式fseek()
fsetpos()
fseeko()
lseek()
许多似乎有 *64()
个版本:
fseeko64()
lseek64()
更复杂的是,许多似乎需要宏定义(如 _LARGEFILE64_SOURCE
或 _GNU_SOURCE
)可用或使用 64 位版本。
在 Windows、Linux、Mac、BSD、Solaris 等平台上使用 ANSI C 来保证 64 位 IO 的最简单方法是什么,从什么时候开始有了它每个人都支持 OS?
代码作品需要至少使用以下限制之一::
long
是64位+,那就用fseek()
。只查找代码由于
fread(), fgets(), fscanf(), fgets()
而到过的位置,因此使用fgetpos()
、fsetpos()
。如果文件是文本文件,这是最好的方法。可以访问依赖于平台的 64 位搜索,例如
lseek64()
。多个 32 位
fseek()
.在
rewind()
和fgetc()/fread()
中使用非常低效的代码。
What is the easiest way to guarantee 64-bit IO using ANSI C on Windows, Linux, Mac, BSD, Solaris, etc.
最简单的方法?将您的代码编译为 64 位可执行文件。请务必使用正确的类型,例如size_t
是 而不是 而 unsigned int
- size_t
是 size_t
。希望您已经超越了 ANSI C,因为它通常指的是 C89,并且可能不支持 64 位架构。
正如评论中所暗示的那样,没有任何符合 C 标准的方法可以保证您可以轻松超过 2GB。但是,对于 64 位二进制文件,POSIX 兼容的 IO(open()
、read()
、write()
等)都可以作为 size_t
/ ssize_t
POSIX 使用的 IO 是 64 位的。 POSIX 还指定了 fseeko()
and ftello()
,它们是 64 位兼容的。
and since when has it been supported by each OS?
有关详细信息,请参阅 here。粗略地说,"full" 64 位支持日期大约为以下时间:
- 索拉里斯:1998
- Linux: 2003
- Windows: 2006
- OS X: 2007