fsetpos
Определено в заголовочном файле <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 FP (floating-point) values.
#define SIZE 5
double A[SIZE] = {1.0, 2.0, 3.0, 4.0, 5.0};
// Write array to a file.
FILE * fp = fopen("test.bin", "wb");
fwrite(A,sizeof(double),SIZE,fp);
fclose (fp);
// Read the FP values into array B.
double B[SIZE];
fp = fopen("test.bin","rb");
fpos_t pos;
if (fgetpos(fp, &pos)) // 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 FP value
// current position: after reading one f-p value
printf("%.1f; read count = %d\n", B[0], ret_code); // print one FP value and ret_code
if (fsetpos(fp, &pos)) // 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 FP value
printf("%.1f; read count = %d\n", B[0], ret_code); // print one FP value and ret_code
fclose(fp);
return EXIT_SUCCESS;
}
Возможный вывод:
1.0; read count = 1 1.0; read count = 1
Ссылки
- Стандарт C23 (ISO/IEC 9899:2024):
- 7.21.9.3 Функция fsetpos (стр.: TBD)
- Стандарт C17 (ISO/IEC 9899:2018):
- 7.21.9.3 Функция fsetpos (стр.: TBD)
- Стандарт 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/c/io/fsetpos