据书上说Unix 环境中的高级编程:-
“lseek 名称中的字符 l 表示‘长整型’。在引入 off_t 数据类型之前,偏移量参数和返回值都是长整型。当长整型被添加到 C 中时,lseek 是在版本 7 中引入的。 (版本 6 中的函数eek 和tell 提供了类似的功能。)”
我们知道文件描述符的值是有限制的。该值位于范围内0-OPEN_MAX-1因此,如果早期版本使用长整型作为文件描述符,那么这可能意味着每个进程可以打开的最大文件数必须根据系统字格式(32 位或 64 位)而变化,这意味着可用文件描述符的数量可能约为 10^18。我说得对吗?
答案1
lseek
的long
参数和返回值都是偏移量在文件中;添加long
对文件描述符没有任何影响。
不同的字长确实对可用偏移量的大小有影响;看lseek64
寻求解决方法。
答案2
我相信这是一个误会。
书中的完整引用是
三个符号常量
SEEK_SET
—SEEK_CUR
、 和SEEK_END
— 是在 System V 中引入的。在此之前,whence 被指定为 0(绝对)、1(相对于当前偏移量)或 2(相对于文件末尾)。许多软件仍然存在这些数字的硬编码。
l
名称中的字符lseek
表示“长整型”。在介绍该off_t
数据类型之前,偏移参数和返回值是长整数。当长整数被添加到 C 中时,lseek 是在版本 7 中引入的。(版本 6 中的函数seek
和提供了类似的功能tell
。)
文本中没有任何地方提到任何时间点的返回值是文件描述符。