根据 Robert Love 的教科书的文件大小限制

根据 Robert Love 的教科书的文件大小限制

来自罗伯特·洛夫的Linux系统编程(2007,O'Reilly),这是第一段(第 1 章,第 10 页)中给出的内容:

文件位置的最大值仅受用于存储它的 C 类型大小的限制,在当代 Linux 中为 64 位。

但在下一段中他说:

文件可能是空的(长度为零),因此不包含有效字节。最大文件长度与最大文件位置一样,仅受 Linux 内核用于管理文件的 C 类型大小的限制。

我知道这可能非常非常基本,但是他是说文件大小受到文件数据类型或整数数据类型?

答案1

他说它受 64 位类型的约束,其最大值为 (2 ^ 64) - 1 无符号,或 (2 ^ 63) - 1 有符号(1 位保存符号,+/-)。

类型不是FILE;这是实现用来跟踪文件偏移量的方法,即off_t,它是 a 的 typedef64 位类型。1 (2 ^ 63) - 1 = 9223372036854775807。如果 1 TB 为 1000 ^ 4 字节,则约为 920 万 TB。据推测,使用有符号类型的原因是它可以保存值 -1(用于错误等)或相对偏移量。

fseek()类似和ftell()使用有符号的函数long,在 64 位 GNU 系统上也是 64 位。


1.参见types.h和。typesizes.h/usr/include/bits

相关内容