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