fgetpos - Linux


fgetpos retrieves the current file position of the specified stream in a posix-compliant way. It is commonly used in conjunction with fsetpos to modify or restore the file pointer.


int fgetpos(FILE *stream, fpos_t *pos);




Example 1: Retrieve the current file position

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

int main() {
    FILE *fp = fopen("myfile.txt", "r");
    if (fp == NULL) {

    fpos_t pos;
    if (fgetpos(fp, &pos) != 0) {

    printf("Current file position: %d\n", pos);
    return 0;

Example 2: Restore the file position using fsetpos

// Assuming fp is an open file stream

fpos_t saved_pos;
if (fgetpos(fp, &saved_pos) != 0) {
    // Handle error

// ... Some operations that modify the file pointer

if (fsetpos(fp, &saved_pos) != 0) {
    // Handle error

Common Issues

  • Ensure that stream is a valid file stream that has been opened for reading or writing. Attempting to get the position of a closed stream will result in an error.
  • The type of pos must be fpos_t, which is a platform-dependent data type. To ensure portability, it is recommended to use fpos_t instead of long or int.


fgetpos can be used in conjunction with other file manipulation functions, such as:

  • fseek and ftell to manually control the file pointer.
  • fread and fwrite to read and write data from and to the file at specific positions.
  • rewind to reset the file pointer to the beginning of the stream.

Related Commands

  • fsetpos: Sets the file position of a stream.
  • fseek: Sets the file position of a stream based on an offset.
  • ftell: Retrieves the current file position within a stream.