интересный вопрос, редкость тут.
приходит в голову два варианта организации кольцевого буфера прозрачно для остального стдлиба.
первый: если у этой системы с ограниченной памятью есть MMU, то можно замаппить на соседние страницы один и тот же кусок памяти, чтобы после конца буфера снова шло его начало. а после каждого sprintf проверять на переполнение и сдвигать указатель текущей позиции в первую страницу (отнимать размер буфера). или просто делать and, если размер кратен степени двойки. это было бы аппаратно и фактически бесплатно по производительности, работало бы вообще со всеми функциями стдлиба, но хлопотно и далеко не всегда возможно.
второй вариант: можно сделать свой стрим (
man fopencookie). для вашей цели достаточно написать только обработчик записи, который собственно и будет закольцовывать буфер: копировать сколько влезло в конец, а остальное в начало. и выводить всё в этот стрим fsprinf-ами и прочими функциями работы с потоками. может быть даже получится перенаправить stdout в этот самодельный поток, тогда и обычные printf'ы заработают.