evbuffer_add_buffer()将src中的所有数据移动到dst末尾,成功时返回0,失败时返回-1。 evbuffer_remove_buffer()函数从src中移动datlen字节到dst末尾,尽量少进行复制。如果字节数小于datlen,所有字节被移动。函数返回移动的字节数。 evbuffer_add_buffer()在0.8版本引入;evbuffer_remove_buffer()是2.0.1-alpha版本新增...
voidevbuffer_free(structevbuffer*buffer) 释放buffer所占用的内存。 intevbuffer_add_buffer(structevbuffer*outbuf,structevbuffer*inbuf) 移动数据从一个evbuffer到另一个evbuffer。 实际上还是调用了evbuffer_add添加数据到outbuf中。但会清除inbuf中的数据。 返回值:成功返回0, 失败返回-1。 intevbuffer_add_printf(...
if(buffer ==NULL) return(NULL); buffer->refcnt =1; buffer->last_with_datap = &buffer->first; return(buffer); } Buffer的数据操作: 在链表尾添加数据: Libevent提供给用户的添加数据接口是evbuffer_add,现在就通过这个函数看一下是怎么将数据插入到buffer中的。该函数是在链表的尾部添加数据,如果想在...
该函数的作用是扩大链表的buffer空间,使得下次add一个长度为datlen的数据时,无需动态申请内存。 由于确保的是无需动态申请内存,所以假如这个链表本身还有大于datlen的空闲空间,那么这个evbuffer_expand函数将不做任何操作。 如果这个链表的所有buffer空间都被用完了,那么解决需要创建一个buffer为datlen的evbuffer_chain,然...
EVBUFFER_PTR_ADD, }; int evbuffer_ptr_set (struct evbuffer *buffer, struct evbuffer_ptr *pos, size_t position, enum evbuffer_ptr_how how); 修改evbuffer中的evbuffer_ptr。 检查数据但是不复制出来 sruct aevbuffer_iovec { void *iov_base; ...
16 evbuffer_add_file(evb, fd, 0, st.st_size); 后经过调试发现,是由于代码第四行中打开文件的方式有问题。缺少O_BINARY标志,导致对于某些包含不可显示或者中文的文件会卡死。 改成如下代码即可: 1 /* Otherwise it’s a file; add it to the buffer to get ...
output buffer of bev. It stops once we have added 1k of data; once this data is drained, we'll add more. */struct count*c=ctx;struct evbuffer*tmp=evbuffer_new();while(evbuffer_get_length(tmp)<1024){unsigned long next=c->last_fib[0]+c->last_fib[1];c->last_fib[0]=c->last_...
应用程序只需要调用event_dispatch(),然后动态增加或移除事件,而不用修改事件循环。目前,Libevent支持/...
what bufferevents do.The functions in this chapter are declared in event2/buffer.h unless otherwise noted.Creating or freeing an evbuffer Interface struct evbuffer *evbuffer_new(void);void evbuffer_free(struct evbuffer *buf);These functions should be relatively clear: evbuffer_new() allocates and ...
The evbuffer_add_buffer() function moves all data fromsrcto theend ofdst. It returns 0 on success, -1 on failure. The evbuffer_remove_buffer() function moves exactlydatlenbytesfromsrcto the end ofdst, copying as little as possible. Ifthere are fewer thandatlenbytes to move, it moves al...