📄 ring.c.txt
字号:
#include "ring.h"
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
void ring_buffer_init(ring_buffer_t *ring)
{
ring->signature = RING_SIGNATURE;
ring->begin_p = ring->buffer;
ring->end_p = &ring->buffer[sizeof(ring->buffer)];
ring->head_p = ring->buffer;
ring->tail_p = ring->buffer;
}
int ring_buffer_read(ring_buffer_t *ring,
unsigned char *buf, int count)
{
/* do some check */
if(ring->signature != RING_SIGNATURE){
printf("ring_buffer_read: signature corrupt\n");
return(0);
}
if((ring->tail_p < ring->begin_p) || (ring->tail_p > ring->end_p)){
printf("ring_buffer_read: tail corrupt\n");
return(0);
}
if(count != 1){
printf("ring_buffer_read: count must currently be 1\n");
return(0);
}
if(ring->tail_p == ring->end_p){ //go a surrend of the buffer
ring->tail_p = ring->begin_p;
}
if(ring->tail_p == ring->head_p){ //the buffer is full
printf("ring_buffer_read: buffer underflow\n");
return(0);
}
*buf = *ring->tail_p++;
return(1);
}
int ring_buffer_write(ring_buffer_t *ring,
unsigned char *buf, int count)
{
unsigned char *tail_p;
/* do some check */
if(ring->signature != RING_SIGNATURE){
printf("ring_buffer_write: signature corrupt\n");
return(0);
}
if((ring->head_p < ring->begin_p) || (ring->head_p > ring->end_p)){
printf("ring_buffer_write: tail corrupt\n");
return(0);
}
if(count != 1){
printf("ring_buffer_write: count must currently be 1\n");
return(0);
}
tail_p = ring->tail_p;
if(((ring->head_p == tail_p - 1))||
((ring->head_p == ring->end_p - 1)&&(ring->tail_p == ring->begin_p)
)){
printf("ring_buffer_write: buffer underflow");
return(0);
}
*ring->head_p++ = *buf;
if(ring->head_p == ring->end_p){
ring->head_p = ring->begin_p;
}
return(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -