# fgetpos

From cppreference.com
< c‎ | io

Defined in header `<stdio.h>` |  |
int fgetpos( FILE *stream, fpos_t *pos ); |  | (until C99)
int fgetpos( FILE *restrict stream, fpos_t *restrict pos ); |  | (since C99)

Obtains the file position indicator and the current parse state (if any) for the file stream `stream` and stores them in the object pointed to by `pos`. The value stored is only meaningful as the input to fsetpos.

### Parameters

stream | - | file stream to examine
pos | - | pointer to a fpos_t object to store the file position indicator to

### Return value

​0​ upon success, nonzero value otherwise.

### Example

Run this code

    #include <stdio.h>
    #include <stdlib.h>
    #include <assert.h>

    int main(void)
    {
        // prepare a file holding 4 values of type 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);

        // demo using fsetpos to return to the beginning of a file
        fp = fopen("test.bin", "rb");
        fpos_t pos;
        fgetpos(fp, &pos);               // store start of file in pos
        double d;
        rc = fread(&d, sizeof d, 1, fp); // read the first double
        assert(rc == 1);
        printf("First value in the file: %.1f\n", d);
        fsetpos(fp,&pos);                 // move file position back to the start of the file
        rc = fread(&d, sizeof d, 1, fp);  // read the first double again
        assert(rc == 1);
        printf("First value in the file again: %.1f\n", d);
        fclose(fp);

        // demo error handling
        rc = fsetpos(stdin, &pos);
        if(rc) perror("could not fsetpos stdin");
    }

Output:

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

### References

- C11 standard (ISO/IEC 9899:2011):

  - 7.21.9.1 The fgetpos function (p: 336)

- C99 standard (ISO/IEC 9899:1999):

  - 7.19.9.1 The fgetpos function (p: 302)

- C89/C90 standard (ISO/IEC 9899:1990):

  - 4.9.9.1 The fgetpos function

### See also

ftell | returns the current file position indicator (function)
fseek | moves the file position indicator to a specific location in a file (function)
fsetpos | moves the file position indicator to a specific location in a file (function)

Retrieved from "https://en.cppreference.com/mwiki/index.php?title=c/io/fgetpos&oldid=82021"