Encontre este codigo lo que agregue es lo del int main() supongo que deberia estar funcionando porque inprimi 20 valores en total con 10 valores con 2 y 10 con 3 y el tamaño del buffer es de 10;
#include<stdio.h>
#define BUFSIZE 10
int buf[BUFSIZE];
int *pIn, *pOut, *pEnd;
int full;
void buf_init();
int buf_put(int c);
int buf_get(int *pc);
int main(){
int c;
int valor;
int i;
buf_init();
for(i=0;i<20;i++){
if(i<10){
c=2;
buf_put(c);
}
if(i>=10 && i<20){
c=3;
buf_put(c);
}
buf_get(&valor);
printf("%d\n",valor);
}
return 0;
}
// init
void buf_init()
{
pIn = pOut = buf; // init to any slot in buffer
pEnd = &buf[BUFSIZE]; // past last valid slot in buffer
full = 0; // buffer is empty
}
// add int 'c' to buffer
int buf_put(int c)
{
if (pIn == pOut && full)
return 0; // buffer overrun
*pIn++ = c; // insert c into buffer
if (pIn >= pEnd) // end of circular buffer?
pIn = buf; // wrap around
if (pIn == pOut) // did we run into the output ptr?
full = 1; // can't add any more data into buffer
return 1; // all OK
}
// get a int from circular buffer
int buf_get(int *pc)
{
if (pIn == pOut && !full)
return 0; // buffer empty FAIL
*pc = *pOut++; // pick up next char to be returned
// printf("%d",*pc);
if (pOut >= pEnd) // end of circular buffer?
pOut = buf; // wrap around
full = 0; // there is at least 1 slot
return 1; // *pc has the data to be returned
}