我正在读"TCP/IP精益“这本书,我偶然发现了下面这段我不理解的代码。有人能给我解释一下吗?
WORD buff_in(CBUFF *bp, BYTE *data, WORD len)
{
WORD in, n, n1, n2;
in = (WORD)bp->in & (bp->len-1);
n = minw(len, buff_freelen(bp));
n1 = minw(n, (WORD)(bp->len - in));
n2 = n - n1;
if (n1 && data) memcpy(&bp->data[in], data, n1);
if (n2 && data) memcpy(bp->data, &data[n1], n2);
bp->in += n;
return(n);
}发布于 2011-02-13 10:25:36
你真的应该给这段代码提供更多的上下文。WORD可能有4个字节长,因为这是TCP/IP内部结构。
它似乎与将数据从C缓冲区复制到IPv4数据包有关。两个memcpy调用似乎交换了两个数据块。
如果你能解释一下buff_in的输入应该代表什么,那会很有帮助的。CBUFF有点误导,因为它显然是某种结构。也许只有一个长度的字节后面跟着一个数据缓冲区,但如果你能确定地告诉我们,这将会有所帮助。
发布于 2011-02-13 20:22:48
它似乎正在从data向循环缓冲区bp复制高达len字节的数据。
bp->len是循环缓冲区的长度,必须是2的幂,bp->in是循环缓冲区内的索引,下一个字节将写入该索引。buff_freelen(bp)返回循环缓冲区中的空闲空间量,minw()返回两个参数中的最小值。
n设置为要复制的字节数、提供的len的最小值或目标缓冲区中的空闲空间量。然后,它将其拆分为两个块- n1,它在从bp->data[in]开始并在bp->data[bp->len - 1]之前结束时复制,以及n2 (可能长度为零),它在从bp->data[0]开始时复制。
它前进bp->in并返回n,即复制的字节数。
https://stackoverflow.com/questions/4981944
复制相似问题