Oi Maurício,
tem uma forma de fazer o que você quer. Usando a função
fseek você consegue definir manualmente a posição a partir da qual você vai começar a escrever no arquivo.
O único problema é que tudo o que for escrito usando fprintf vai sobreescrever o que já estiver no arquivo. Isto é, ao escrever algo no início arquivo, o conteúdo original NÂO é "empurrado" para o final. Mas se você reservar espaço no início do arquivo, então você pode voltar e escrever algo no inicio sem maiores problemas.
Abaixo segue um exemplo:
#include <stdio.h>
int main(){
FILE * file = fopen("blah.txt", "r+");
fseek(file, 2, SEEK_SET);
fprintf(file, "XY");
fclose(file);
return 0;
}
no caso, quando chamo a função fseek, estou dizendo que quero começar a escrever na posição distante 2 bytes em relação ao início do arquivo (que é a posição zero).
Veja o resultado de um simples teste usando o programa (que chamei de teste) compilado a partir do código acima:
flc@compy386:/tmp/teste$ echo "ABCDEF" > blah.txt
flc@compy386:/tmp/teste$ cat blah.txt
ABCDEF
flc@compy386:/tmp/teste$ ./teste
flc@compy386:/tmp/teste$ cat blah.txt
ABXYEF
flc@compy386:/tmp/teste$
Acho que com isso, você consegue resolver seu problema, só não esqueça de reservar o espaço necessário antes.