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); }
