Arp*_*ith 4 linux system-programming limit files
来自 Robert Love 的Linux System Programming (2007, O'Reilly),这是第一段(第 1 章,第 10 页)中给出的内容:
文件位置的最大值仅受用于存储它的 C 类型大小的限制,在当代 Linux 中为 64 位。
但在下一段中,他说:
文件可能为空(长度为零),因此不包含有效字节。与最大文件位置一样,最大文件长度仅受 Linux 内核用于管理文件的 C 类型大小的限制。
我知道这可能非常非常基本,但是他是说文件大小受FILE数据类型或int数据类型的限制吗?
他说它受 64 位类型的约束,该类型的最大值为 (2 ^ 64) - 1 无符号,或 (2 ^ 63) - 1 有符号(1 位保存符号,+/-)。
类型不是FILE; 它是实现用于跟踪文件中的偏移量的内容,即off_t,它是有符号64 位类型的 typedef 。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。