Что такое ключевое слово FILE в C?
Я начал изучать некоторые C как хобби и в течение долгого времени использовал FILE в качестве объявления для указателей на файлы, и мне было интересно. Является ли это ключевым словом или специальным типом данных для C для обработки файлов? Он содержит поток для файла внутри и других данных? Почему он определен как указатель?
Пример, чтобы показать, что я хочу сделать немного понятным:
FILE* fp; //<-- this
fp = fopen("datum.txt", "r");
while(!feof( ... ) //etc.
Ответы
Ответ 1
- это ключевое слово или специальный тип данных для C для обработки файлов с?
То, о чем вы говорите, это структура typedef'd, используемая стандартной библиотекой io для хранения соответствующих данных для использования fopen и семейства функций.
Почему он определен как указатель?
С указателем на структуру вы можете передать его как параметр функции. Это, например, то, что fgets или fgetc примет, в форме function(FILE* fp)
Функция fopen вернет указатель на вновь созданную структуру FILE, назначив этот новый указатель на ваш неиспользуемый, заставит их указывать на одно и то же.
Он содержит поток для файла внутри и других данных?
Определение структуры кажется немного более иллюзорным, чем его описание. Это прямо взято из моего stdio.h, из MinGW32 5.1.4
typedef struct _iobuf
{
char* _ptr;
int _cnt;
char* _base;
int _flag;
int _file;
int _charbuf;
int _bufsiz;
char* _tmpfname;
} FILE;
Который включает в себя прекрасное замечание перед ним:
Некоторые считают, что никто в здравом уме не должен использовать внутренности этой структуры.
Содержимое этой структуры, по-видимому, сильно изменилось в других реализациях, источники glibc обычно имеют некоторую форму комментариев, но их структура для этого возникает при большом количестве кода.
Было бы разумно прислушаться к вышеупомянутому предупреждению и просто не волноваться, что он делает.:)
Ответ 2
FILE
- это идентификатор, используемый как имя typedef, обычно для struct
.
Библиотека stdio обычно имеет что-то вроде
typedef struct {
...
} FILE;
где-то. Все функции, имеющие отношение к указателям FILE, знают, что они существуют ...
и могут получить доступ к элементам структуры. Программисты C должны использовать такие функции, как fopen
, feof
, ferror
, ungetc
и т.д. Для создания и работы с структурами FILE. Такие типы называются непрозрачными (т.е. Вы не можете заглянуть внутрь, но должны использовать функции доступа).
Ответ 3
Это не ключевое слово, это тип данных, определенный в стандарте ANSI C для работы с файлами. Обычно это указывает на внутреннюю структуру, которая описывает файл и его текущее состояние в библиотечных функциях.
Ответ 4
Это специальный тип данных. Он содержит дескриптор файла, а также различные флаги, используемые внутренне различными вызовами stdio. Вам никогда не понадобится знать, что в нем, просто что это тип данных, который вы можете передать.
http://www.cplusplus.com/reference/clibrary/cstdio/FILE/
Однако, если вам интересно, вот как это выглядит:
http://en.allexperts.com/q/C-1587/2008/5/FILE-Structure.htm