C语言 更改evbuffer中的字节

fhity93d  于 2022-12-03  发布在  其他
关注(0)|答案(1)|浏览(128)

我有一个libevent struct evbuffer,在程序中的某个位置我向它写入,稍后我可能需要返回到我写入的内容,并将一个字节从“1”更改为“0”。
为了做到这一点,我希望有一个指向该字节的指针。
获得该字节的最佳方法是什么(要么在写入后立即获得其地址,要么知道偏移量),以及如何更新它,以便我可以确保这是实际的字节,而不是它为我获取时所做的libevent的副本?
Fiddling Bits请求的代码示例:

struct evbuffer* buf = evbuffer_new();
evbuffer_add(buf, "abc1def", 7);

// What I'd like to achieve:
char *byte = evbuffer_get_by_offset(buf, 3, 1); // Get one character, offset of 3
*byte = '0'; // buf now holds "abc0def"
krugob8w

krugob8w1#

先不考虑是否应该这样做,下面是使用evbuffer_iovecevbuffer_peek实现这一点的方法:

size_t offset = 3;

struct evbuffer_ptr pointer;
evbuffer_ptr_set(buf, &pointer, offset, EVBUFFER_PTR_SET);

struct evbuffer_iovec vec;
int num_of_vecs = evbuffer_peek(buf, 1, &pointer, &vec, 1);
assert(num_of_vecs == 1);

*(char *)(vec.iov_base) = '0';

相关问题