Namespaces
Variants

fgetpos

From cppreference.net
< c ‎ | io
Определено в заголовочном файле <stdio.h>
int fgetpos ( FILE * stream, fpos_t * pos ) ;
(до C99)
int fgetpos ( FILE * restrict stream, fpos_t * restrict pos ) ;
(начиная с C99)

Получает индикатор позиции файла и текущее состояние разбора (если имеется) для файлового потока stream и сохраняет их в объекте, на который указывает pos . Сохраненное значение имеет смысл только как входные данные для fsetpos .

Содержание

Параметры

stream - файловый поток для проверки
pos - указатель на объект fpos_t для сохранения индикатора позиции в файле

Возвращаемое значение

0 при успешном выполнении, иначе ненулевое значение.

Пример

#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
    // подготовка файла с 4 значениями типа double
    enum {SIZE = 4};
    FILE* fp = fopen("test.bin", "wb");
    assert(fp);
    int rc = fwrite((double[SIZE]){1.1, 2.2, 3.3, 4.4}, sizeof(double), SIZE, fp);
    assert(rc == SIZE);
    fclose(fp);
    // демонстрация использования fsetpos для возврата в начало файла
    fp = fopen("test.bin", "rb");
    fpos_t pos;
    fgetpos(fp, &pos);               // сохраняем начало файла в pos
    double d;
    rc = fread(&d, sizeof d, 1, fp); // читаем первый double
    assert(rc == 1);
    printf("First value in the file: %.1f\n", d);
    fsetpos(fp,&pos);                // возвращаем позицию файла в начало
    rc = fread(&d, sizeof d, 1, fp); // снова читаем первый double
    assert(rc == 1);
    printf("First value in the file again: %.1f\n", d);
    fclose(fp);
    // демонстрация обработки ошибок
    rc = fsetpos(stdin, &pos);
    if (rc)
        perror("could not fsetpos stdin");
}

Вывод:

First value in the file: 1.1
First value in the file again: 1.1
could not fsetpos stdin: Illegal seek

Ссылки

  • Стандарт C23 (ISO/IEC 9899:2024):
  • 7.21.9.1 Функция fgetpos (стр.: TBD)
  • Стандарт C17 (ISO/IEC 9899:2018):
  • 7.21.9.1 Функция fgetpos (стр.: TBD)
  • Стандарт C11 (ISO/IEC 9899:2011):
  • 7.21.9.1 Функция fgetpos (стр: 336)
  • Стандарт C99 (ISO/IEC 9899:1999):
  • 7.19.9.1 Функция fgetpos (стр: 302)
  • Стандарт C89/C90 (ISO/IEC 9899:1990):
  • 4.9.9.1 Функция fgetpos

Смотрите также

возвращает текущий индикатор позиции в файле
(функция)
перемещает индикатор позиции в файле в указанное место
(функция)
перемещает индикатор позиции в файле в указанное место
(функция)
C++ documentation для fgetpos