Namespaces
Variants

fsetpos

From cppreference.net
< c ‎ | io
Defined in header <stdio.h>
int fsetpos ( FILE * stream, const fpos_t * pos ) ;

Sets the file position indicator and the multibyte parsing state (if any) for the file stream stream according to the value pointed to by pos .

Besides establishing new parse state and position, a call to this function undoes the effects of ungetc and clears the end-of-file state, if it is set.

If a read or write error occurs, the error indicator ( ferror ) for the stream is set.

Contents

Parameters

stream - file stream to modify
pos - pointer to a fpos_t object to use as new value of file position indicator

Return value

0 upon success, nonzero value otherwise.

Notes

After seeking to a non-end position in a wide stream, the next call to any output function may render the remainder of the file undefined, e.g. by outputting a multibyte sequence of a different length.

Example

fsetpos with error checking

#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;
}

Possible output:

1.0; read count = 1
1.0; read count = 1

References

  • C23 standard (ISO/IEC 9899:2024):
  • 7.21.9.3 The fsetpos function (p: TBD)
  • C17 standard (ISO/IEC 9899:2018):
  • 7.21.9.3 The fsetpos function (p: TBD)
  • C11 standard (ISO/IEC 9899:2011):
  • 7.21.9.3 The fsetpos function (p: 337)
  • C99 standard (ISO/IEC 9899:1999):
  • 7.19.9.3 The fsetpos function (p: 303)
  • C89/C90 standard (ISO/IEC 9899:1990):
  • 4.9.9.3 The fsetpos function

See also

gets the file position indicator
(function)
returns the current file position indicator
(function)
moves the file position indicator to a specific location in a file
(function)