Как указано в комментариях, вам не нужно обращаться к деталям объекта, на который указывает FILE*
- используйте fread()
, fgetc()
и т. Д.
Если вы хотите знать, что в нем содержится, определение обычно содержится в stdio.h, но оно не будет очень информативным!
Что он делает, это обеспечивает буфер для «необработанного файла», который обозначается дескриптором файла (обычно просто int) и используется с такими функциями, как open()
, read()
и т. Д. Внутренние поля есть управлять буфером, позицией в файле, флагами ошибок и т. д.
Если вы используете fgetc()
для чтения одного символа из файла, библиотека фактически загрузит блок данных из базового файлового дескриптора, сохранит его и вернет один символ. В следующий раз, когда вы используете fgetc()
, он забирает следующий символ из своего хранилища и больше не будет обращаться к реальному файлу. Как только все символы из хранилища будут возвращены, к базовому файлу будет открыт доступ к следующему блоку. Это более эффективно, если вы хотите читать символ за символом. То же относится и к написанию с fputc()
.
Стоит также отметить, что дескриптор файла на самом деле не может быть файлом на диске, это может быть последовательный порт, канал или что-то еще.