Работа с индикатором позиции.
void rewind(FILE* stream);
устанавливает индикатор позиции на начало файла, связанного с потоком stream. При этом сбрасывается индикатор ошибки и конца файла.
int fseek(FILE* stream, long offset, int mode);
сдвигает индикатор позиции файла на offset байтов. В случае успешного завершения функция возвращает 0, в противном случае – ненулевое значение. Параметр mode указывает на режим сдвига и может принимать следующие значения:
SEEK_SET – смещение от начала файла,
SEEK_CUR – смещение от текущей позиции,
SEEK_END – смещение от конца файла.
При работе с текстовым потоком должны использоваться только следующие комбинации значений параметров:
mode = SEEK_SET offset = 0 или
offset = значению, возвращаемому функцией ftell
mode = SEEK_CUR offset = 0
mode = SEEK_END offset = 0
int fsetpos(FILE* stream, const fops_t *pos);
устанавливает индикатор позиции файла stream в позицию, на которую указывает параметр pos. Индикатор конца файла сбрасывается. В случае успеха функция возвращает 0, а в случае неудачи возвращает ненулевое значение и устанавливает переменную errno.
long ftell(FILE* stream);
в случае успешного завершения возвращает текущую позицию файла stream, а в случае неудачи – возвращает значение 1L и устанавливает значение переменной errno. Для бинарного потока позиция равна смещению в байтах от начала файла, а в случае текстового потока – значению, которое может использоваться функцией fseek.
int fgetpos(FILE* stream, fops_t* pos);
записывает текущую позицию файла stream по адресу pos. В случае успеха функция возвращает 0, а в случае неудачи – ненулевое значение и устанавливает значение переменной errno.
Блочный ввод-вывод
size_t fwrite(const void* ptr, size_t size, size_t nitems, FILE* stream);
которая записывает содержимое блока памяти, на который указывает ptr, в файл stream. Длина записываемого блока определяется как произведение size*nitems. Функция возвращает число записанных единиц памяти. В случае удачи это число должно быть равно nitems.
size_t fread(const void* ptr, size_t size, size_t nitems, FILE* stream);
Для чтения блока из файла используется функция параметры которой имеют тот же смысл, что и в функции fwrite
Удаление и переименование
int remove(const char* filename);
Удаляет файл с именем filename. В случае удачи возвращает 0, иначе возвращает не 0.
int rename(const char* old_filename, const char* new_filename);
Переименовывает файл. В случае удачи возвращает 0, иначе возвращает не 0.
Символьный ввод-вывод используется с текстовыми потоками.
int fputc(int c, FILE* stream);
записывает символ, заданный параметром с, в поток stream и продвигает индикатор позиции на следующий символ. В случае успеха функция возвращает символ с, а в случае неудачи EOF и устанавливает индикатор ошибки.
int putc(int c, FILE* stream);
Работает так же как и функция fputc, но может быть реализована как макрокоманда.
int fgetc(FILE* stream);
читает символ из потока stream и продвигает индикатор позиции на следующий символ. В случае успешного завершения функция возвращает прочитанный символ. В случае достижения конца файла функция возвращает EOF и устанавливает индикатор конца файла. В случае ошибки функция возвращает EOF и устанавливает индикатор ошибки.
int getc(FILE* stream);
Работает так же как и функция fgetc, но может быть реализована как макрокоманда.
int ungetc (int c, FILE* stream);
записывает символ с в поток stream. Функции fseek, fsetpos и rewind игнорируют такие символы. Доступ к записанным символам выполняется по правилу FIFO. В случае успеха функция возвращает записанный символ, а в случае неудачи – EOF.
Форматированный ввод-вывод.
int fprintf(FILE* stream, const char* format, …);
выполняет вывод в файл stream в соответствии с форматной строкой format.
int fscanf(FILE* stream, const char* format, …);
выполняет ввод из файла stream текста в соответствии с форматной строкой format.
Стандартные потоки.
Каждой программе предоставляются три стандартных потока, которые по умолчанию соединены с консолью. Указатели на эти потоки возвращают макрокоманды stdin, stdout, stderr. Для работы со стандартными потоками предназначены рассмотренные ранее функции scanf, printf, а также следующие функции:
int putchar(int c); /* вывод символа в stdout */
int getchar(void); /* ввод символа из stdin */
int puts(const char* str); /* вывод строки в stdout */
char* gets(char* str); /* ввод строки из stdin */
void perror(const char* str); /* вывод сообщения об ошибке в stderr */