Cuando tu escribes en un buffer de memoria, el sistema crea un puntero que apunta a una posición concreta del buffer, de tal forma que cuando inicias operaciones de lectura o escritura, éstas se realizan a partir de esa posición.
Bueno, también puede darse el caso de que se utilicen dos punteros independientes, uno para la lectura y otro para la escritura.
La posición de éstos punteros, normalmente, se determina de forma relativa con respecto al inicio del buffer.
Con esta información, lo que podrías hacer es lo siguiente:
Lee la posición del puntero para saber si has llegado al final del archivo.
Cuando hayas llegado al final posiciona el puntero de nuevo en el principio del archivo y continúa con tu escritura.
Código
// Posiciona el puntero al inicio del archivo // Obtiene la posición del puntero