سلام دوستان عزیز
بنده در پیاده سازی circular_buffer به مشکل خوردم
کد رو پیاده سازی کردم ولی نمیدونم چطور میشه داده رو ذخیره و بازیابی کرد
این کد

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <time.h>
#include <stdio.h>
#include <stdbool.h>
#include <assert.h>

#define BUFFER_SIZE 1000
#define EXAMPLE_BUFFER_SIZE 4096

void error(const char *msg) { perror(msg); }

/*
*
*
* circular_buffer
*
*
* */

struct circular_buf_t
{
uint8_t* buffer;
size_t head;
size_t tail;
size_t max; // of the buffer
bool full;
};

/// Opaque circular buffer structure
typedef struct circular_buf_t circular_buf_t;

/// Handle type, the way users interact with the API
typedef circular_buf_t* cbuf_handle_t;

bool circular_buf_full(cbuf_handle_t me)
{
assert(me);

return me->full;
}




bool circular_buf_empty(cbuf_handle_t me)
{
assert(me);

return (!circular_buf_full(me) && (me->head == me->tail));

}

static inline size_t advance_headtail_value(size_t value, size_t max)
{
return (value + 1) % max;
}

static void advance_head_pointer(cbuf_handle_t me)
{
assert(me);

if(circular_buf_full(me))
{
me->tail = advance_headtail_value(me->tail, me->max);
}

me->head = advance_headtail_value(me->head, me->max);
me->full = (me->head == me->tail);
}



cbuf_handle_t circular_buf_init(uint8_t* buffer, size_t size)
{
assert(buffer && size);

cbuf_handle_t cbuf = malloc(sizeof(circular_buf_t));
assert(cbuf);

cbuf->buffer = buffer;
cbuf->max = size;
circular_buf_reset(cbuf);

assert(circular_buf_empty(cbuf));

return cbuf;
}

void circular_buf_free(cbuf_handle_t me)
{
assert(me);
free(me);
}

void circular_buf_reset(cbuf_handle_t me)
{
assert(me);

me->head = 0;
me->tail = 0;
me->full = false;
}

size_t circular_buf_size(cbuf_handle_t me)
{
assert(me);

size_t size = me->max;

if(!circular_buf_full(me))
{
if(me->head >= me->tail)
{
size = (me->head - me->tail);
}
else
{
size = (me->max + me->head - me->tail);
}
}

return size;
}

size_t circular_buf_capacity(cbuf_handle_t me)
{
assert(me);

return me->max;
}

void circular_buf_put(cbuf_handle_t me, uint8_t data)
{
assert(me && me->buffer);

me->buffer[me->head] = data;

advance_head_pointer(me);
}

int circular_buf_try_put(cbuf_handle_t me, uint8_t data)
{
int r = -1;

assert(me && me->buffer);

if(!circular_buf_full(me))
{
me->buffer[me->head] = data;
advance_head_pointer(me);
r = 0;
}

return r;
}

int circular_buf_get(cbuf_handle_t me, uint8_t* data)
{
assert(me && data && me->buffer);

int r = -1;

if(!circular_buf_empty(me))
{
*data = me->buffer[me->tail];

printf("here %s", data);

me->tail = advance_headtail_value(me->tail, me->max);
me->full = false;
r = 0;
}

return r;
}


int circular_buf_peek(cbuf_handle_t me, uint8_t* data, unsigned int look_ahead_counter)
{
int r = -1;
size_t pos;

assert(me && data && me->buffer);

// We can't look beyond the current buffer size
if(circular_buf_empty(me) || look_ahead_counter > circular_buf_size(me))
{
return r;
}

pos = me->tail;
for(unsigned int i = 0; i < look_ahead_counter; i++)
{
data[i] = me->buffer[pos];
pos = advance_headtail_value(pos, me->max);
}

return 0;
}

int main()
{
int i;

int error_in = 0;
int button_in = 1;
int up_in = 0;
int net_down_in = 0;
char output[20];

char machine_status[22];
char *custom_date = "";

// first where are we going to send it?
char *host = "localhost";
char *json_message = "";
char *path = "/IoT/APIs/insert/insertLog.php";

struct hostent *server;

FILE *fptr;
char * line = NULL;
size_t len = 0;
ssize_t read;

custom_date = format_time(output);

printf("\nString written on buffer = %s\n", machine_status);

printf ( "Current local time and date: %s\n", format_time());

if (error_in == 1 && button_in == 0 && up_in == 0) {
sprintf(machine_status,"MC001*1*%s\n", custom_date);
} else if (error_in == 0 && button_in == 1 && up_in == 0) {
sprintf(machine_status,"MC001*2*%s\n",custom_date) ;
} else if (error_in == 0 && button_in == 0 && up_in == 1) {
sprintf(machine_status,"MC001*3*%s\n", custom_date);
}
uint8_t * buffer = malloc(EXAMPLE_BUFFER_SIZE * sizeof(uint8_t));
cbuf_handle_t me = circular_buf_init(buffer, EXAMPLE_BUFFER_SIZE);
circular_buf_put(me, "test");


// lookup the ip address
server = gethostbyname(host);
if (/*server == NULL*/net_down_in == 1) {
error("ERROR, Internet Down or No such host");
} else {
fptr = fopen("fprintf_test.txt", "r");
circular_buf_get(me, buffer);
}

return 0;
}


مقدار test رو توسط circular_buf_put در بافر ذخیره کردم و اون رو با متد circular_buf_get میخام فراخونی کنم و نمایش بدم اما نمیدونم چطور باید اینکار رو انجام بدم
ممنون میشم کمکم کنید با تشکر