Файл – это именованная область данных на каком-либо носителе информации.
Типы файлов (с точки зрения интерпретации информации в программе на Си):
Основные операции производимые над файлами:
Дополнительные операции:
Для работы с файлами в программах на Си используется заголовочный файл stdio.h, в котором объявлен специальный тип данных — структура FILE, предназначенная для хранения атрибутов (параметров) файлов (указатель текущей позиции файла, признак конца файла, флаги индикации ошибок, сведения о буферизации и др.). Переменные типа FILE нельзя создавать вручную.
Для работы с файлом в программе нужно создать "указатель на файл".
FILE *имя = NULL;
Нужно осознавать, что каждое обращение к файлу выполняется через системный вызов. При этом этот указатель не нужно разыменовывать при обращении к файлу, библиотечной функции передается сам этот указатель.
FILE *fopen(const char *filename, const char *mode);
где filename -- название файла, mode -- режим открытия.
Функция возвращает указатель на файл, если тот был успешно открыт. В противном случае -- NULL.
Название файла содержит только имя файла, если файл находится в текущем каталоге. Иначе необходимо указать абсолютный или относительный путь к файлу.
Примеры:
r | только чтение |
w | Только запись. Если файл существовал, то он переписывается. |
a | Добавление: открытие файла для записи в конец, или создание файла. |
r+ | Открывает файл для обновления (чтение и запись). |
w+ | Открывает файл для обновления (чтение и запись), переписывая файл, если он существует. |
a+ | Открывает файл для записи в конец файла или для чтения. |
Во втором параметре дополнительно может указываться символ t и b для указания текстовый файл или двоичный (необязательно для многих операционных систем):
rt, wt, at, rt+, wt+, at+
rt, wt, at, rt+, wt+, at+
int fclose(FILE *stream);
где stream -- указатель на открытый файл.
Функция возвращает:
Можно закрыть и открыть новый файл в одну команду:
FILE * freopen(const char *filename, const char *mode, FILE *stream);
Функция возвращает указатель на файл, если все нормально, и NULL, если возникла ошибка открытия нового файла или закрытия старого.
int fscanf(FILE *stream, const char * format, [arg] ...);
Функция возвращает:
char * fgets(char * buffer, int maxlen, FILE *stream);
В maxlen следует указать размер буфера, чтобы при записи в память функция чтения не вышла за его границы.
Функция считывает строку до символа перевода каретки '\n' или maxlen — что наступит раньше.
Функция возвращает указатель на buffer, если все нормально, и NULL, если возникла ошибка или достигнут конец файла.
int fgetc(FILE *stream);
Функция возвращает код символа, если все нормально, и EOF, если произошла ошибка или достигнут конец файла.
int ungetc(int c, FILE *stream);
Функция возвращает код символа, если все успешно, и EOF, если произошла ошибка.
int fprintf(FILE *stream, const char *format, [arg] ...);
Функция возвращает число записанных символов, если все нормально, и отрицательное значение, если произошла ошибка.
int fputs(const char *string, FILE *stream);
Функция возвращает число записанных символов, если все нормально, и EOF, если произошла ошибка.
int fputc(int c, FILE *stream);
Функция возвращает код записанного символа, если все нормально, и EOF, если произошла ошибка.
size_t fread(void *buffer, size_t size, size_t num,FILE *stream);
Функция возвращает количество прочитанных блоков.
Если оно меньше num, то произошла ошибка или достигнут конец файла.
size_t fwrite(const void *buffer, size_t size, size_t num, FILE *stream);
Функция возвращает количество записанных блоков.
Если оно меньше num, то произошла ошибка.
int feof(FILE *stream);
где stream -- указатель на открытый файл
Функция возвращает 0, если файловый поток не кончился, и не ноль, если достигнут конец файла.
long int ftell(FILE *stream);
int fseek(FILE *stream, long int offset, int origin);
Значение origin может принимать три значения:
Функция возвращает 0, если все нормально, и не ноль, если произошла ошибка.
void rewind(FILE *stream);
int fgetpos(FILE *stream, fpos_t *pos);
int fsetpos(FILE *stream, const fpos_t *pos);
Функции возвращают 0, если все нормально, и не ноль, если произошла ошибка.
Структура fpos_t
int ferror(FILE *stream);
Функция возвращает ненулевое значение, если возникла ошибка.
void clearerr(FILE *stream);
void perror(const char *string);
Функция очистки буфера:
int fflush(FILE *stream);
Функция возвращает 0, если все нормально, и EOF, если произошла ошибка.
Функция управления буфером:
void setbuf(FILE *stream, char *buffer);
Создает буфер размером BUFSIZ. Используется до ввода или вывода в поток.
Функция создания временного файла:
FILE * tmpfile(void);
Создает временный файл в режиме wb+. После закрытия файла, последний автоматически удаляется.
Функция генерации имени временного файла:
char * tmpnam(char *buffer);
int remove(const char *filename);
Функция возвращает 0 в случае успеха, не ноль в противном случае.
int rename(const char *fname, const char *nname);
Функция возвращает 0 в случае успеха, не ноль в противном случае.