Цитата(CrimsonPig @ Oct 19 2015, 13:02)

Делаем копию указателя (или индекса, зависит от имплементации) записи, уменьшаем его на нужное кол-во записей (по модулю размера буфера + отслеживание пересечения границы чтения) и читаем с инкрементом. Атомарность, проверки на переполнение\опустошение и прочие невнятные мелочи опускаем для простоты

Если почитать-таки код в первом сообщении, там именно это и делается.
"Для простоты" там, правда, нет указания, сколько же данных у нас запросили.
И ещё, там нет кольцевого буфера (запись не вижу, а на чтение - точно нету!). Зато есть как минимум пара лишних переменных (чтоб никто не догадался).
И очень удобный формат, в котором они возвращаются - полностью всё перепутано.
Я б ТЗ стряс для начала. Сколько записей, сколько хранить, сколько считывать (считывать только так, или это только один из интерфейсов), ...
А то опять угадайка "что хотел сказать автор" с нерабочим кодом...