C rioBufferWrite函数Redis更新位置

C rioBufferWrite函数Redis更新位置,c,redis,C,Redis,当我在Redis中阅读的代码时,我发现一些关于rioBufferWrite和rioBufferRead函数的混淆点。为什么这两个功能都需要将len添加到pos? 我认为只有读取操作应该更新pos。我将非常感谢你的回答 代码如下: /* Returns 1 or 0 for success/failure. */ static size_t rioBufferWrite(rio *r, const void *buf, size_t len) { r->io.buffer.ptr =

当我在Redis中阅读的代码时,我发现一些关于
rioBufferWrite
rioBufferRead
函数的混淆点。为什么这两个功能都需要将
len
添加到
pos

我认为只有读取操作应该更新
pos
。我将非常感谢你的回答

代码如下:

/* Returns 1 or 0 for success/failure. */
static size_t rioBufferWrite(rio *r, const void *buf, size_t len) {
    r->io.buffer.ptr = sdscatlen(r->io.buffer.ptr,(char*)buf,len);
    r->io.buffer.pos += len;
    return 1;
}

/* Returns 1 or 0 for success/failure. */
static size_t rioBufferRead(rio *r, void *buf, size_t len) {
    if (sdslen(r->io.buffer.ptr)-r->io.buffer.pos < len)
        return 0; /* not enough buffer to return len bytes. */
    memcpy(buf,r->io.buffer.ptr+r->io.buffer.pos,len);
    r->io.buffer.pos += len;
    return 1;
}
/*返回1或0表示成功/失败*/
静态大小缓冲写入(rio*r、常量无效*buf、大小缓冲写入){
r->io.buffer.ptr=sdscatlen(r->io.buffer.ptr,(char*)buf,len);
r->io.buffer.pos+=len;
返回1;
}
/*返回1或0表示成功/失败*/
静态大小\u t rioBufferRead(rio*r,void*buf,大小\u t len){
if(sdslen(r->io.buffer.ptr)-r->io.buffer.posio.buffer.ptr+r->io.buffer.pos,len);
r->io.buffer.pos+=len;
返回1;
}

您可以将代码作为文本发布。您是否尝试将这些中文符号粘贴到翻译器的写入功能中,以更新pos?为什么您认为只有读取操作才应该更新位置?@AndreKampling我认为读取操作记录了上次完成读取的位置,因此需要更新。但是写操作只是将字符串附加到buf。如果它更新了位置,当我下次调用读取操作时,位置是不正确的。在中有以下函数:
static off\t rioBufferTell(rio*r){…}
和下面关于它的注释:
/*返回缓冲区中的读/写位置*/。他们想让它成为两个行动的阵地。这是一个关于设计决策的问题。因为我没有IDE中的代码,所以很难搜索所有出现的位置。。。我认为他们需要在某一点上两者相等。你可以将代码作为文本发布。你是否尝试将这些中文符号粘贴到翻译器的写函数中,以更新pos?为什么你认为只有读操作才能更新位置?@AndreKampling我认为读操作记录了它完成的位置上次阅读,所以需要更新。但是写操作只是将字符串附加到buf。如果它更新了位置,当我下次调用读取操作时,位置是不正确的。在中有以下函数:
static off\t rioBufferTell(rio*r){…}
和下面关于它的注释:
/*返回缓冲区中的读/写位置*/。他们想让它成为两个行动的阵地。这是一个关于设计决策的问题。因为我没有IDE中的代码,所以很难搜索所有出现的位置。。。我认为他们需要在某一点上对双方都平等。