fsetpos
Defined in header <stdio.h> |
||
|---|---|---|
int fsetpos( FILE *stream, const fpos_t *pos ); |
Устанавливает указатель позиции файла и состояние многобайтового разбора (если таковое имеется) для потока файла stream в соответствии со значением, на которое указывает pos.
Помимо установления нового состояния разбора и позиции, вызов этой функции отменяет действие ungetc и очищает состояние конца файла, если оно установлено.
Если произошла ошибка чтения или записи, устанавливается индикатор ошибки (ferror) для потока.
Параметры
| stream | - | поток файла, который необходимо изменить |
| pos | - | указатель на объект fpos_t для использования в качестве нового значения указателя позиции файла |
Возвращаемое значение
0 в случае успеха, ненулевое значение в противном случае.
Примечания
После перехода к позиции, отличной от конца, в широком потоке следующий вызов любой функции вывода может сделать остальную часть файла неопределённой, например, выведя последовательность многобайтового символа другой длины.
Пример
fsetpos с проверкой ошибок
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
/* Prepare an array of f-p values. */
#define SIZE 5
double A[SIZE] = {1.,2.,3.,4.,5.};
/* Write array to a file. */
FILE * fp = fopen("test.bin", "wb");
fwrite(A,sizeof(double),SIZE,fp);
fclose (fp);
/* Read the f-p values into array B. */
double B[SIZE];
fp = fopen("test.bin","rb");
fpos_t pos;
if (fgetpos(fp,&pos) != 0) /* current position: start of file */
{
perror("fgetpos()");
fprintf(stderr,"fgetpos() failed in file %s at line # %d\n", __FILE__,__LINE__-3);
exit(EXIT_FAILURE);
}
int ret_code = fread(B,sizeof(double),1,fp); /* read one f-p value */
/* current position: after reading one f-p value */
printf("%.1f; read count = %d\n", B[0], ret_code); /* print one f-p value and ret_code */
if (fsetpos(fp,&pos) != 0) /* reset current position to start of file */
{
if (ferror(fp))
{
perror("fsetpos()");
fprintf(stderr,"fsetpos() failed in file %s at line # %d\n", __FILE__,__LINE__-5);
exit(EXIT_FAILURE);
}
}
ret_code = fread(B,sizeof(double),1,fp); /* reread first f-p value */
printf("%.1f; read count = %d\n", B[0], ret_code); /* print one f-p value and ret_code */
fclose(fp);
return EXIT_SUCCESS;
}Вывод:
1.0; read count = 1 1.0; read count = 1
Ссылки
- Стандарт C11 (ISO/IEC 9899:2011):
- 7.21.9.3 Функция fsetpos (стр. 337)
- Стандарт C99 (ISO/IEC 9899:1999):
- 7.19.9.3 Функция fsetpos (стр. 303)
- Стандарт C89/C90 (ISO/IEC 9899:1990):
- 4.9.9.3 Функция fsetpos
См. также
| получает указатель позиции файла (функция) |
|
| возвращает текущий указатель позиции файла (функция) |
|
| перемещает указатель позиции файла в определённое место в файле (функция) |
|
Документация C++ для fsetpos |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/io/fsetpos