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() в том же потоке.
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);
}