C

lseek 函式將文件描述符作為長整數返回的原因是什麼?

  • September 19, 2017

根據Unix 環境中的高級程式一書:-

“lseek 名稱中的字元 l 的意思是‘長整數’。在引入 off_t 數據類型之前,偏移量參數和返回值都是長整數。lseek 是在第 7 版中引入的,當時將長整數添加到 C。 (版本 6 中的 seek 和 tell 函式提供了類似的功能。)"

我們知道文件描述符的值是有限制的。這個值在0 - OPEN_MAX-1的範圍內。所以,如果早期版本使用長整數作為文件描述符,那麼這可能意味著最大文件數可以每個程序打開的文件必鬚根據系統字格式(32 位或 64 位)而有所不同,這意味著可用文件描述符的數量可能是 10^18 的數量級。對嗎?

lseeklong參數和返回值都是文件中的偏移量;添加long對文件描述符沒有任何影響。

不同的字長確實對可用偏移量的大小產生了影響;查看lseek64解決方法。

我相信這是一種誤解。

這本書的完整報價是

System V 引入了三個符號常量—— SEEK_SET、、SEEK_CUR和——。在此之前,其被指定為 0(絕對)、1(相對於目前偏移量)或 2(相對於文件末尾)。SEEK_END許多軟體仍然存在這些數字硬編碼。

l名稱中的字元lseek表示“長整數”。在引入 off_t數據類型之前,偏移量參數返回值都是長整數。lseek 是在第 7 版中引入的,當時將長整數添加到 C 中。(第 6 版中的函式seek和提供了類似的功能tell。)

文本中沒有任何地方說明返回值在任何時間點都是文件描述符。

引用自:https://unix.stackexchange.com/questions/388497