Chinaunix

标题: Help, 写个小程序遇到问题了 [打印本页]

作者: fl3w    时间: 2012-10-24 16:07
标题: Help, 写个小程序遇到问题了
写了个linux下面的小程序,用到了  strptime(), libcurl,  但是编译运行遇到各种BUG:
BUG 0:
编译告诉我:
  1. warning: implicit declaration of function 'strptime'
复制代码
但是我的编译指令里面有
-D XOPEN_SOURCE -D  __USE_XOPEN

BUG1:
如果我不是在整个程序的第一行开始运行
curl_easy_init();
报错。

BUG2:
关键代码片断:
  1. curl_easy_setopt( _curl,CURLOPT_URL, full_url);               
  2.                 curl_easy_setopt( _curl,CURLOPT_WRITEFUNCTION, solr_quest_doc_resp_write);               
  3.                 curl_easy_setopt( _curl,CURLOPT_WRITEDATA, read_buff);
复制代码
在这个solr_quest_doc_resp_write()函数里面,发现read_buff被改了。。。。

环境:
uname -an
  1. Linux LocalDomain.TestServer-15 2.6.32-71.el6.x86_64 #1 SMP Fri May 20 03:51:51 BST 2011 x86_64 x86_64 x86_64 GNU/Linux
复制代码
gcc --version
gcc (GCC) 4.4.4 20100726 (Red Hat 4.4.4-13)

rpm -q curl
curl-7.19.7-16.el6.x86_64


神啦,救救我吧。







作者: hellioncu    时间: 2012-10-24 16:13
       #define _XOPEN_SOURCE /* glibc2 needs this */
       #include <time.h>
作者: linux_c_py_php    时间: 2012-10-24 16:20
BUG0:

Manpage里只需要开一个宏.
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>

  4. #define _XOPEN_SOURCE
  5. #include <time.h>

  6. int main(int argc, char * const argv[]) {
  7.     struct tm tm_time;
  8.     strptime("%", "%%", &tm_time);
  9.     return 0;
  10. }
复制代码
BUG1:
不创建curl实例怎么操作curl?
http://curl.haxx.se/libcurl/c/curl_easy_init.html

BUG2:
curl_easy_setopt( _curl,CURLOPT_WRITEFUNCTION, solr_quest_doc_resp_write);   
这是设置一个回调函数, 每次接收到HTTP应答, 就会回调solr_quest_doc_resp_write函数, 并将HTTP应答的数据(可能是部分)传给这个函数, 让用户能够将应答数据写到buffer或者文件里.

curl_easy_setopt( _curl,CURLOPT_WRITEDATA, read_buff);
这是设置上面注册的回调函数solr_quest_doc_resp_write的回调参数, 也就是用户自定义数据, 每次都会当作userdata回调传递进solr_quest_doc_resp_write.
用户的read_buff在这里肯定是用来容纳HTTP应答的, 被修改太正常了.


作者: fl3w    时间: 2012-10-24 16:27
hellioncu 发表于 2012-10-24 16:13
#define _XOPEN_SOURCE /* glibc2 needs this */
       #include


这个肯定代码里面是有的。
作者: fl3w    时间: 2012-10-24 16:28
linux_c_py_php 发表于 2012-10-24 16:20
BUG0:

Manpage里只需要开一个宏.BUG1:


问题是,我传入的read_buff,它给我改了内容了。。。。
作者: hellioncu    时间: 2012-10-24 16:30
fl3w 发表于 2012-10-24 16:27
这个肯定代码里面是有的。


可是你的“XOPEN_SOURCE”前面少一个下划线
作者: linux_c_py_php    时间: 2012-10-24 16:31
关键是你了解libcurl的目的是什么, 以及writefunction是干什么用的, 以及writedata是干什么用的... 否则怎么更你说都没用啊.

fl3w 发表于 2012-10-24 16:28
问题是,我传入的read_buff,它给我改了内容了。。。。

作者: fl3w    时间: 2012-10-24 16:36
hellioncu 发表于 2012-10-24 16:30
可是你的“XOPEN_SOURCE”前面少一个下划线


多谢,的确是这个问题,这个BUG解决了。
作者: fl3w    时间: 2012-10-24 16:40
linux_c_py_php 发表于 2012-10-24 16:31
关键是你了解libcurl的目的是什么, 以及writefunction是干什么用的, 以及writedata是干什么用的... 否则怎么 ...


用libcurl查询 http server,然后解析 http response.

writeData 放的是一个结构体,用来保存http response的解析结果,现在的问题是:curl或者gcc破坏了我定义好的writeData里面的结构体,,

这个程序,在 gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-52), curl-7.15.5-15.el5 下面是运行良好的。

现在我不知道到底是gcc,curl版本的问题,还是我的程序问题--在某个版本下面侥幸运行成功了。

作者: linux_c_py_php    时间: 2012-10-24 16:49
你确定不是你代码自己破坏的...vargrind查一下.




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2