Подтвердить что ты не робот

Что такое ключевое слово FILE в C?

Я начал изучать некоторые C как хобби и в течение долгого времени использовал FILE в качестве объявления для указателей на файлы, и мне было интересно. Является ли это ключевым словом или специальным типом данных для C для обработки файлов? Он содержит поток для файла внутри и других данных? Почему он определен как указатель?

Пример, чтобы показать, что я хочу сделать немного понятным:

FILE* fp; //<-- this
fp = fopen("datum.txt", "r");

while(!feof( ... ) //etc.
4b9b3361

Ответ 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