Стандартная библиотека C предоставляет непрозрачный указатель FILE*
, дескриптор файла , которым вы можете манипулировать с помощью fopen()
/ fclose()
, и доступ с помощью fread()
/ fwrite()
.
POSIX предлагает понятие файловых дескрипторов , которые являются целыми числами. Вы можете манипулировать ими с помощью open()
/ close()
и получать доступ с помощью read()
/ write()
.
Для каждого дескриптора открытого файла FILE * fp
в системе POSIX вы можете получить базовый дескриптор файла с помощью fileno(fp)
. И наоборот, для существующего файлового дескриптора n
вы можете открыть стандартный дескриптор файла с помощью fdopen(n)
.
Другими словами, файловые дескрипторы POSIX - это примитив операционной системы, который используется для реализации стандартной библиотеки io на языке Си. Обратите внимание, что дескрипторы файлов POSIX также служат дескрипторами для сокетов.
Ваш последний вызов fgets()
не определен, потому что fclose()
делает недействительным дескриптор файла и, следовательно, его базовый дескриптор файла. fdopen()
не не дублирует дескриптор файла.