Spec-Zone.ru › C++

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

См. также

fgetpos
получает указатель позиции файла
(функция)
ftell
возвращает текущий указатель позиции файла
(функция)
fseek
перемещает указатель позиции файла в определённое местоположение в файле
(функция)
Документация C для fsetpos

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/io/c/fsetpos

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API