Spec-Zone.ru › C

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

См. также

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

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

Spec-Zone.ru

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