Meine Güte stellt euch doch nicht so an!
Bei einem Ringbuffer werden Daten in einen Speicherbereich geschrieben, wobei während des Befüllens gleichzeitig auch ein Lesen erlaubt ist. Kritische Punkte stellen dabei der Randpunkt, das obere Ende des Speichers und das „Überholen“ des Auslesezeigers, sowie das Auslesen, über den Speicherrand dar. Erreicht der Schreibezeiger das Ende, muss am Anfang weitergeschrieben werden. Erreicht der Lesezeiger das Ende, muss eine zusammengesetzte Zeichenkette zurückgegeben werden. Überholt der Schreibzeiger den Lesezeiger, muss dieser auf den nächsten gültigen Eintrag weitergesetzt werden, bevor eingefüllt werden kann!
Sowas in c zu schreiben stellt nun nicht wirklich ein Problem dar oder?!
In deinem Fall würdest du halt fixe Blockgrössen nehmen, dann tust du dir auch beim Berechnen des Weitersetzens leichter. Der Speicher sollte nach Möglichkeit ein Vielfaches der Grösse der Struktur sein.
Mit einem Array zu arbeiten ist die andere, meines Erachtens nicht so hübsche Methode, da du sonst so abhängig von der Struktur bist. Wenn du blanken Speicher nimmst kannst du im Prinzip alles Reinschreiben. Als Leseparameter einfach nur einen Datenblock mit Grösse rein und beim Lesen eben einen Block mit bestimmter Grösse rauslesen.
==> Wiederverwendbarkeit

Noch eine Alternative ist:
Du verwendest in deiner Struktur magic Cookies. Die kann man dann leicht im Speicher finden. Stichwort Überschreiben des Auslesezeigers..


Gruss
Michael

PS: Gott war der Beitrag schon alt =)