ВУЗ:
Составители:
Рубрика:
45
том, что у любого открытого файла в программе написанной на С имеется
указатель позиции (номера), с которой осуществляется считывание данных из
файла. При открывании файла на чтение номер этой позиции указывает на
начало файла. Поэтому функция fscanf(), вызванная первый раз, считывает
данные первой строки. По мере считывания информации из файла, позиция
сдвигается на число считанных символов. И функция fscanf() вызванная второй
раз будет работать уже со второй строкой в файле. Несмотря на то, что
указатель позиции в файле перемещается автоматически, в языке С имеются
функции fseek() и ftell(), позволяющие программно управлять положением
позиции в файле. Синтаксис данных функций следующий:
int fseek( FILE *stream, long offset, int origin );
long ftell( FILE *stream );
где *stream – указатель на файл; offset – смещение позиции в файле (в байтах);
origin – флаг начального отсчета, который может принимать значения:
SEEK_END – конец файла, SEEK_SET – начало файла; SEEK_CUR – текущая
позиция. Последняя функция возвращает номер текущей позиции в файле.
Рассмотрим действие данных функций на примере считывания символов
из файла в обратном порядке.
Листинг 11. Использование функций fseek() и ftell().
#include <stdio.h>
int main(void)
{
FILE* fp = fopen("my_file.txt","w");
if(fp != NULL)
{
fprintf(fp,"It is an example using fseek and ftell
functions.");
}
fclose(fp);
fp = fopen("my_file.txt","r");
if(fp != NULL)
{
char ch;
fseek(fp,0L,SEEK_END);
long length = ftell(fp);
printf("length = %ld\n",length);
for(int i = 1;i <= length;i++)
{
fseek(fp,-i,SEEK_END);
ch = getc(fp);
putchar(ch);
}
}
fclose(fp);
return 0;
Страницы
- « первая
- ‹ предыдущая
- …
- 43
- 44
- 45
- 46
- 47
- …
- следующая ›
- последняя »