fseeko – установка позиции в потоке данных.
Синтаксис:
#include < stdio.h >
int fseeko (FILE *stream, off_t offset, int whence);
Аргументы:
stream – указатель на управляющую таблицу потока данных.
offset – смещение позиции.
whence – точка отсчета смещения.
Возвращаемое значение:
0 – при успешной установки позиции.
Отличное от нуля значение, если при работе функции произошли ошибки. При этом переменной ernno будет присвоен код ошибки:
         [EINVAL] – неверное значение аргумента whence
         [ESPIPE] – недопустимое значение аргумента offset
Описание:
Функция fseeko() устанавливает позицию в потоке данных, заданным аргументом stream. Относительно установленной позиции будет осуществляться чтение и запись данных.
Точка отсчета устанавливаемой позиции определяется аргументом whence, который может принимать значения:
         SEEK_SET – смещение отсчитывается от начала файла
         SEEK_CUR – смещение отсчитывается от текущей позиции
         SEEK_END – смещение отсчитывается от конца файла
Смещение задается аргументом offseto, причем положительное значение аргумента означает смещения вправо от указанной аргументом whence позиции, отрицательное – смещение влево.
Для двоичных потоков данных, смещение (offset) – это количество байт.
Для текстовых потоков данных смещение (offset) должно быть равно 0, либо получено с помощью функции ftello(), при этом точка отсчета (whence) должна иметь значение SEEK_SET.
По сути, функция fseeko аналогична функции fseek и отличается только типом аргумента offset. Так в функции fseek аргумент offset имеет тип long int, а в функции fseeko – имеет тип off_t. Однако тип off_t ничто иное, как переопределения типа long int.
Пример:
В примере считывается строка из начала файла, а затем из позиции, смещенной относительно начала файла на 5 байт. Смещение задается с помощью функции fseeko. В файле записана следующая строка: 123456789.
#include < stdio.h > //fopen, fclose, printf, fseeko, fgets
int main (void)
{
// Переменная, в которую будет сохранен указатель
// на управляющую таблицу открываемого потока данных
FILE *mf;
//Массив в который будет записана считанная из потока данных строка
char str[50];
// Открытие файла
printf (“Открытие файла: ”);
mf=fopen (“myfile/test.txt”,”r+”);
// Проверка открытия файла
if (mf == NULL) printf (“ошибка\n”);
else printf (“выполнено\n”);
//Установка текущей позиции
printf (“ Установка позиции на начало файла: ”);
if (fseeko (mf,0,SEEK_SET)==0)
printf (“выполнено\n”);
else
printf (“ошибка\n”);
//Чтение строки из файла
printf (“ Считываем строку: ”);
if (fgets (str, sizeof (str), mf)==NULL)
printf (“строка не считана\n”);
else
printf (“%s\n”,str);
//Установка текущей позиции
printf (“ Установка позиции на пятый байт: ”);
if (fseeko (mf,5,SEEK_SET)==0)
printf (“выполнено\n”);
else
printf (“ошибка\n”);
//Чтение строки из файла
printf (“ Считываем строку: ”);
if (fgets (str, sizeof (str), mf)==NULL)
printf (“строка не считана\n”);
else
printf (“%s\n”,str);
// Закрытие файла
printf (“Закрытие файла: ”);
if ( fclose (mf) == EOF) printf (“ошибка\n”);
else printf (“выполнено\n”);
return 0;
}
| |
Результат:
Вывод на консоль:
Открытие файла: выполнено
Установка позиции на начало файла: выполнено
Считываем строку: 123456789
Установка позиции на пятый байт: выполнено
Считываем строку: 6789
Закрытие файла: выполнено
|
Смотри так же:
fseek
fgetpos
fseeko
fsetpos
ftell
ftello
rewind
|