Работа с индикатором позиции.

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 */

Наши рекомендации