C rioBufferWrite函数Redis更新位置
当我在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 =
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中的代码,所以很难搜索所有出现的位置。。。我认为他们需要在某一点上对双方都平等。