В чем причина того, что функция lseek возвращает дескрипторы файлов как длинные целые числа?

Согласно книге « Расширенное программирование в среде Unix» :

«Символ l в названии lseek означает« длинное целое число ». До введения типа данных off_t аргумент offset и возвращаемое значение были длинными целыми числами. Lseek был введен с версией 7, когда к C. добавлены длинные целые числа. (Аналогичная функциональность была предоставлена ​​в Версии 6 функциями поиска и подсказки.) "

Мы знаем, что существует ограничение на значение файловых дескрипторов. Это значение находится в диапазоне 0OPEN_MAX-1. Поэтому, если более ранние версии используют длинное целое число для файловых дескрипторов, это может означать, что максимальное количество файлов, которые могут (32 бит или 64 бит), а это означает, что количество доступных файловых дескрипторов может быть порядка 10 ^ 18. Я прав?

    long параметры lseek и возвращаемое значение являются смещениями в файле; добавление long не оказало никакого влияния на файловые дескрипторы.

    Изменение размера слова оказало влияние на размер используемых смещений; см. lseek64 для обходного пути.

    Я считаю, что это недоразумение.

    Полная цитата из книги

    Три символьные константы – SEEK_SET , SEEK_CUR и SEEK_END – были введены с системой V. До этого, когда было указано как 0 (абсолютное), 1 (относительно текущего смещения) или 2 (относительно конца файла) , Многое программное обеспечение все еще существует с этими номерами, жестко закодированными.

    Символ l в названии lseek означает «длинное целое число». Перед введением типа данных off_t аргумент offset и возвращаемое значение были длинными целыми числами. lseek был введен с версией 7, когда к C. добавлены длинные целые числа (аналогичная функциональность была предоставлена ​​в версии 6 функциями seek и tell ).

    Нигде в тексте ничего не говорится о возвращаемом значении, являющемся файловым дескриптором в любой момент времени.