int fgetpos (FILE * fluxo, fpos_t * posicao);
Retorna a posição atual do fluxo.
Essa função é diferente da ftell – a função ftell pode ser utilizada para retornar a posição atual do fluxo como um valor numérico, enquanto a função fgetpos preenche o objeto apontado pelo posicao com as informações da posição atual do fluxo. É possível utilizar a função fsetpos para retornar o fluxo para a posição que estava na chamada à fgetpos.
fluxo - Fluxo a ter a posição lida
posicao - Ponteiro para um objeto fpos_t que será preenchido com as informações da posição
Em caso de sucesso, é retornado 0.
Em caso de erro, é retornado um valor diferente de zero e o errno é setado. Ver perror para mais informações.
#include <stdio.h>
int main() {
FILE* arquivo = fopen("arquivo.txt", "r");
if(arquivo == NULL) {
fprintf(stderr, "Erro ao tentar abrir arquivo.txt.\n");
return 1;
}
/* Armazena a posição inicial */
fpos_t posicao;
fgetpos(arquivo, &posicao);
/* Lê um caractere */
int c = fgetc(arquivo);
/* Volta para a posição inicial */
fsetpos(arquivo, &posicao); // o arquivo está na posição inicial novamente!
if(c != fgetc(arquivo)) {
fprintf(stderr, "O arquivo não voltou a posição inicial!\n"); // nunca deve ocorrer
}
fclose(arquivo);
return 0;
}
fsetpos função
fseek função
ftell função