1

我正在用 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() 中。

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

4

1 回答 1

0

具有固定大小的循环缓冲区归结为queue.

此页面提供了一个很好的解释,其中包含 C 中的代码示例。

于 2013-07-20T09:53:58.680 回答