来自罗伯特·洛夫的Linux系统编程(2007,O'Reilly),这是第一段(第 1 章,第 10 页)中给出的内容:
文件位置的最大值仅受用于存储它的 C 类型大小的限制,在当代 Linux 中为 64 位。
但在下一段中他说:
文件可能是空的(长度为零),因此不包含有效字节。最大文件长度与最大文件位置一样,仅受 Linux 内核用于管理文件的 C 类型大小的限制。
我知道这可能非常非常基本,但是他是说文件大小受到文件数据类型或整数数据类型?
答案1
他说它受 64 位类型的约束,其最大值为 (2 ^ 64) - 1 无符号,或 (2 ^ 63) - 1 有符号(1 位保存符号,+/-)。
类型不是FILE
;这是实现用来跟踪文件偏移量的方法,即off_t
,它是 a 的 typedef签64 位类型。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