在C中拆分循环缓冲区的数据

时间:2013-07-19 17:33:07

标签: split circular-buffer

我在C中编写循环缓冲区的代码,但是当写入包装时,我很难将输入写入缓冲区。

我从用户输入一个数据块,包括数字,字符串,空字符,任何东西,并将其写入缓冲区。当写指针到达指针的末尾时,它将换行到顶部并开始从那里写入数据。所以要做到这一点,我想分割块数据,以便将一半数据写入写指针的底部,剩下的数据将从顶部写入。

我无法拆分这些数据。有什么办法吗?

编辑:我用来编写数据的代码。

if (length > circular_buffer_available_space_bottom(cb)) {

/* copy data in the buffer till the end */
memcpy(circular_buffer_ends_at(cb), data, space_bottom);
/* Move the rear pointer to the next write location */
cb->rear = (cb->rear + space_bottom) % cb->length;

/* Calculate space available at top of the buffer */
space_top = length - space_bottom;

/* copy remaining data in available space at the top  */
memcpy(circular_buffer_ends_at(cb), data,space_top);

/* Move the rear pointer to the next write location */
cb->rear = (cb->rear + space_top) % cb->length;
}

这里,首先检查输入数据的长度。 因此,当数据写在底部时,它应该被分割,剩下的数据需要写在顶部,这是在第二个memcpy()中。

现在,我没有拆分数据,我正在寻找一种方法来拆分它。 此代码会给我错误,因为可用空间将少于所需空间。

1 个答案:

答案 0 :(得分:0)

具有固定大小的循环缓冲区降至queue

This page为C中的代码示例提供了很好的解释。