Существует общая концепция, обычно называемая «дескриптором» в контексте программных интерфейсов программного обеспечения.В комментариях вы, вероятно, нашли ссылку на статью Википедии на эту тему .
Вы имеете дело с конкретной реализацией типа данных дескриптора - дескрипторов файлов IBM PC / DOSвозвращается из интерфейса int 0x21
.Если вы хотите узнать больше об этих конкретных файловых дескрипторах, вы можете обратиться к книге Недокументированная DOS , в которой подробно описываются структуры данных в памяти, которые позволяют вам исследовать эти дескрипторы дальше.1009 * Другим конкретным типом дескриптора является дескриптор файла , возвращаемый из стандартного интерфейса POSIX с именем open()
.Эта функция реализована в библиотеке времени выполнения C на таких платформах, как Linux, Windows NT, Mac OS и многих других системах.Целое число, возвращаемое при вызове open()
, может не быть отрицательным числом.
Если вы не работаете в DOS, ваши файловые дескрипторы, вероятно, предоставляются операционной системой Windows NT.Эти файловые дескрипторы возвращаются из CreateFile()
(который используется как для открытия, так и для создания файлов), и единственное недопустимое значение для дескриптора, возвращаемого из этой функции, - INVALID_HANDLE_VALUE
.Т.е. API-интерфейс Windows NT может возвращать то, что считается (посредством приведения) «отрицательным» целым числом, хотя он открыл файл.
Во всех этих случаях дескриптор файла используется для ссылки на некоторыеструктура данных, которая отслеживает, как файл открыт.Отслеживается одна важная вещь: текущий файл position .Положение или указатель устанавливается в POSIX с помощью функции lseek()
и считывается с помощью функции tell()
.Любой read()
или write()
происходит с позиции указателя текущего файла.
Ваша программа может открывать один и тот же файл под двумя разными дескрипторами.В этом случае указатель файла для каждого дескриптора различен.Обновление указателя файла одного дескриптора с помощью lseek()
не повлияет на указатель файла другого дескриптора на тот же файл.