Программирование на C и C++

Онлайн справочник программиста на C и C++

fseek

int fseek (FILE *stream, long offset, int origin)

Прототип: 
Описание: 

Функция fseek() устанавливает указатель положения в файле, связанном со stream, в соответ­ствии со значениями offset и origin. Ее основное назначение — поддерживать операции ввода/ вывода по произвольному адресу. Аргумент offset — это выраженный в байтах сдвиг от позиции, определяемой origin, до новой позиции. Аргумент origin может принимать значения 0, 1 или 2, причем 0 означает начало файла, 1 — текущую позицию, а 2 — конец файла. В stdio.h определе­ны следующие макросы для origin

Имя Позиция origin
SEEK_SET Начало файла
SEEK_CUR Текущая позиция
SEEK_END Конец файла

 В случае успеха fseek() возвращает 0. Ненулевое значение означает неудачу. С помощью fseek() можно переместить указатель положения в любую точку внутри файла и даже за его пределы после конца файла. Однако попытка установить указатель перед началом файла будет восприня­та как ошибка.

Функция fseek() сбрасывает флаг конца файла, связанный с указанным потоком. Кроме того, она обнуляет любую предыдущую ungetc() в том же потоке.

Пример: 
Приведенная здесь функция отыскивает указанную структуру типа addr. Обратим внимание на то, что sizeof используется как для получения количества байт, на которое нужно сместиться, так и для обеспечения переносимости.
struct  addr {
char    name[40];
char    street[40];
char    city[40] ;
char    state[3];
char zip[10];
} info;
void find(long client_num)
{
FILE *fp;
if ((fp=fopen("mail", "rb"))==NULL) {
printf("Cannot open file.\n");
exit(1);
}
/* получение правильной структуры */
fseek(client_num*sizeof(struct addr), 0);
/* чтение данных в память */
fread(&info, sizeof(struct addr), 1, fp);
fclose(fp);
}