2011-12-06 70 views
0

我有,我想用下面的數據來填充輸出evbuffer:C&LIBEVENT:二進制數據添加到輸出緩衝

HTTP/1.1 200 OK 
Date: Tue, 06 Dec 2011 10:35:08 GMT 
Server: Apache/2.2.14 (Ubuntu) 
X-Powered-By: PHP/5.3.2-1ubuntu4.9 
Vary: Accept-Encoding 
Content-Encoding: gzip 
Content-Length: 48 
Content-Type: text/html 

��(�ͱ���I�O����H�����ч�� 
          �4�@� 

我用evbuffer_add_printf(...)

我有下面的C回調功能:

static void echo_read_cb(struct bufferevent *bev, void *ctx){ 
    /* This callback is invoked when there is data to read on bev. */ 
    struct evbuffer *input = bufferevent_get_input(bev); 
    struct evbuffer *output = bufferevent_get_output(bev); 

    ... 
    char* response=NULL; 
    response=applyGetReq(url,data,len); 

    int contLen=0; 
    contLen=getContentLength(response); 

    char* binData=strstr(response,"\r\n\r\n"); 
    binData=binData+strlen("\r\n\r\n"); 
    fwrite(binData,sizeof(char),contLen,stdout); 
    printf("\n"); 

    evbuffer_add_printf(output,"%s",binData); //I want to print binData as binary, not printf!!! 
} 

所以我有二進制數據指針(binData),我有一個長度(contLen),我怎麼打印此輸出緩衝區?

提前

回答

2

非常感謝您無法使用evbuffer_add_printf以安全的方式添加二進制數據。嘗試evbuffer_add功能:

int 
evbuffer_add(struct evbuffer *buf, const void *data, size_t datlen) 
{ 
    size_t need = buf->misalign + buf->off + datlen; 
    size_t oldoff = buf->off; 

    if (buf->totallen < need) { 
      if (evbuffer_expand(buf, datlen) == -1) 
        return (-1); 
    } 

    memcpy(buf->buffer + buf->off, data, datlen); 
    buf->off += datlen; 

    if (datlen && buf->cb != NULL) 
      (*buf->cb)(buf, oldoff, buf->off, buf->cbarg); 

    return (0); 
} 

無法找到良好的文檔,我已經看到了,除了源代碼,最好是:

http://transmission.sourcearchive.com/documentation/1.75/event_8h_b652a2f82d23509713258a6e44697164.html#b652a2f82d23509713258a6e44697164

int evbuffer_add ( struct evbuffer * , 
    const void * , 
    size_t   
)   

將數據追加到年底一個evbuffer。

參數:

buf  the event buffer to be appended to 
    data pointer to the beginning of the data buffer 
    datlen the number of bytes to be copied from the data buffer 
+0

真正有用的片段。非常感謝。 – Eamorr

+0

這是'evbuffer_add'本身的源代碼,而不是一個使用示例。閱讀libevent的來源比查找文檔要容易得多。 – osgx

+0

是的,我認爲這是一個片段,但從您的鏈接看,它是源代碼本身。非常感謝。 – Eamorr