從libevent1.4到libevent2.0碰到的問題,struct evhttp_uri在頭文件只有聲明

最近做ministored的時候用libevent來搭建基於http的框架,手頭的庫是去年從官網上下來的1.4 stable的版本,開發完服務器端程序以後,發現libevent 1.4對於客戶端程序的支持不盡如人意,於是手動寫了一個tcp的客戶端來發送http的協議。一切ok!

 

後來無意 中跑去官網上看了看,發現libevent 2.0有stable了,忍不住下了一個下來看看,make install之後開始了我的一天的悲劇之旅。安裝完以後,發現Libevent的訂閱郵件裏面有人寫了一個小的倒子,拿下來一試,居然發現編譯通不過。 在gcc的提示下,很快的清除了各種問題,只剩下一個問題,提示我找不見struct evhttp_uri 中各成員的具體存儲空間。一下子傻眼了,這個 struct evhttp_uri可是一個關鍵的結構體啊。我了個去,跑到libevent2的頭文件裏面,先看http.h,裏面沒有,只有一行聲明, struct evhttp_uri,然後裏面的各式方法裏面包含了n多基於這個結構體的方法,而定義卻是在http.c裏面,找到了struct evhttp_uri的具體定義。那沒錯啊,提供的函數可用,那我自然能用。以爲是代碼混在一起了,於是單獨寫一個小的程序。

 

#include <errno.h>
#include <stdlib.h>
#include <string.h>
 
#include <event2/event.h>
#include <event2/http.h>
#include <event2/buffer.h>
#include <event2/http_struct.h>
 
 
int main(int argc,char * argv[]){
 
    char url[]="http://192.168.1.200:1314/?opt=get ";
    struct evhttp_uri  *uri = evhttp_uri_parse(url);
    printf("%s/t%s/t%s/n",uri->host,uri->port,uri->query);
}

 

發現在gcc上還是通不過,整到這,一下子鬱悶了。爲啥示例程序這麼寫,我寫的卻過不了;頭文件上也有相關的使用啊;難不成是c語言有什麼特性我還不瞭解?

 

想了一晚上,無解,發到水木的c論壇上,一位網友的回覆一語驚醒夢中人。他之所以這麼寫就是不想讓你直接引用他的成員,這裏面具體內容的更改不影響到程序,裏面應該有相應的函數來讀寫。於是重新跑去看http.h的頭文件,tnnd,當時看了那麼久,爲啥偏偏對evhttp_uri_get***/evhttp_uri_set***這些函數視而不見了。

 

唉,問題解決了,下次碰到同樣的問題,一定不要太浮躁,要仔細揣摩下作者背後的意思!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章