c - 如何读取evbuffer并将其放入libevent中的字符串(char *)

标签 c unix libevent

我正在使用 libevent 及其 http API 编写一个能够编写 C servlet 的简单 HTTP 服务器。这个 servlet 使用 GET 可以正常工作,但现在我正在使用 POST 发送一些数据,我想读取传入的事件缓冲区 evb。我想打印/检查 evb 中存在的数据,但我不能。你知道我如何将数据放在 evb (evbuffer) 中的 char* 变量中吗?我只看到了操作缓冲区但没有读取缓冲区的方法。我试过:

EVB->

这是代码:

    #include <stdio.h>
    #include "servlet.h"

    void servlet(struct evhttp_request *req, struct evbuffer *evb) {
        time_t now;
        time(&now);
        evbuffer_add_printf(evb, "<html>\n <head>\n"
            "  <title>%s</title>\n"
            " </head>\n"
            " <body>\n"
            "  <h1>%s</h1>\n"
            " <p>Current time is: %s</p>",
            "C servlet engine", "C servlet", ctime(&now));
        evhttp_add_header(evhttp_request_get_output_headers(req),
            "Content-Type", "text/html");
        evhttp_send_reply(req, 200, "OK", evb);
    }

I am trying this 

void servlet(struct evhttp_request *req, struct evbuffer *evb) {
    size_t len = evbuffer_get_length(evhttp_request_get_input_buffer(req));
    struct evbuffer *in_evb = evhttp_request_get_input_buffer(req);
    char *data;
    evbuffer_copyout(in_evb, data, len);

但我得到总线错误:10(我在 mac 上)

最佳答案

听起来你想用

ev_ssize_t evbuffer_copyout(struct evbuffer *buf, void *data, size_t datalen)

它将缓冲区内容(最多datalen 字节)复制到内存区域data。 它记录在 libevent book

关于c - 如何读取evbuffer并将其放入libevent中的字符串(char *),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11903796/

相关文章:

代码不读取字符串的最后一个字符(C语言)

c - 如何用自定义字符串快速填充缓冲区?

c - va_list 和 va_arg

c - 结构数组 - 数组具有不完整的元素类型(在 C 中)

c - Libevent:获取接受的连接列表

c++ - C/C++ 优化 : negate doubles fast

macos - 通过命令行登录 OSX

python - 使用 Python 进行 SSH 的最简单方法是什么?

linux - 使用一个 shell 运行 shell

rpc - 有没有人在 libevent 中使用过 rpc 框架?