так и реализовывай, при перед/после инкремента указателей проверяй на больше/меньше/равно
Код
int write_buf(int data)
{
*ptr_wr++ = data;
if(ptr_wr >= ptr_end) ptr_wr = ptr_start;
if(ptr_wr == ptr_rd) return 0; // ожидается переполнение!!!
else return 1; // норм
}
или
Код
int read_buf(int *data)
{
if(ptr_rd == ptr_wr) return 0; // пусто!!!
*data = *ptr_rd++;
if(ptr_rd >= ptr_end) ptr_rd = ptr_start;
return 1; // норм
}