#define PRINT_BUF_SIZE (16*1024)
static char *g_pcNetPrintBuf;//环形缓冲区的首地址
static int g_iReadPos = 0; //环形缓冲区读的位置
static int g_iWritePos = 0; //环形缓冲区写的位置
int Init()
{
g_pcNetPrintBuf = malloc(PRINT_BUF_SIZE); //初始化时分配环形缓冲区
if (NULL == g_pcNetPrintBuf)
{
close(g_iSocketServer);
return -1;
}
}
//判断环形缓冲区是否满了
static int isFull(void)
{
return (((g_iWritePos + 1) % PRINT_BUF_SIZE) == g_iReadPos);
}
//判断环形缓冲区是否空
static int isEmpty(void)
{
return (g_iWritePos == g_iReadPos);
}
//往环形缓冲区中存数据,一个字符一个字符的来
static int PutData(char cVal)
{
if (isFull())
return -1;
else
{
g_pcNetPrintBuf[g_iWritePos] = cVal; //写入一个字符
g_iWritePos = (g_iWritePos + 1) % PRINT_BUF_SIZE; //写位置指向下一个位置,构成环形
return 0;
}
}
//从环形缓冲区获得数据
static int GetData(char *pcVal)
{
if (isEmpty())
return -1;
else
{
*pcVal = g_pcNetPrintBuf[g_iReadPos];
g_iReadPos = (g_iReadPos + 1) % PRINT_BUF_SIZE;
return 0;
}
}
环形缓冲区
最新推荐文章于 2024-07-31 22:24:58 发布