一些博客和代码的提醒
来源:互联网 发布:淘宝开学爆到是什么 编辑:程序博客网 时间:2024/06/17 21:55
提醒:
最近没有发表什么文章,但偶然发现博客排名一直向前走,才让我又回到了博客的空间来。
1.最近有些网友在关注我写的C++的笔记,我想说的是:那是前段时间自己复习基础语法,顺便写下来的,没有多大的参考价值,希望需要的网友参考比较完整的书籍,不希望网友浪费宝贵的时间。
2.在一月份曾经发布了C语言版本(Linux平台)的CSDN博客备份工具,有很多感兴趣的,初学Linux的网友将代码作为参考,有个需要注意的:代码的效率有改进的空间,而且使用方法和注释可能会误导初学者,所以建议需要的网友查询相关资料以保证代码使用的正确方法。
有一个需要提的,在代码里面,用到了select函数,在这里我简单的提一下:
static int recv_response(const blog_spider * spider){int ret, end, recvsize, count;char recvbuf[BUFSIZE];fd_set read_fds;struct timeval timeout;FILE *fp;/*建议时间要长点, select失败可能的原因是收到网站的响应消息超时,也可以传入NULL*/timeout.tv_sec = 30;timeout.tv_usec = 0;FD_ZERO(&read_fds);FD_SET(spider->blog->b_sockfd, &read_fds);while (1) {ret = select(spider->blog->b_sockfd+1, &read_fds, NULL, NULL, &timeout);if (-1 == ret) {/*出错,直接返回错误*/#ifdef SPIDER_DEBUGfprintf(stderr, "select: %s\n", strerror(errno));#endifreturn -1;}else if (0 == ret) {/*超时, 继续轮询*/#ifdef SPIDER_DEBUGfprintf(stderr, "select timeout: %s\n", spider->blog->b_title);#endifgoto fail_recv_response;}/*接受到数据*/if (FD_ISSET(spider->blog->b_sockfd, &read_fds)) {end = 0;count = 0;/*这里出错可能是文件名不规则,比如"3/5",'/'在Linux是代表目录*/fp = fopen(spider->blog->b_local_file, "w+");if (NULL == fp) {goto fail_recv_response;}spider->blog->b_download = BLOG_DOWNLOAD;while (read(spider->blog->b_sockfd, recvbuf, 1) == 1) {if(end< 4) {if(recvbuf[0] == '\r' || recvbuf[0] == '\n') {end++;}else {end = 0;}/*这里是http服务器反馈的消息头,若需要,则可以保存下来*/}else {fputc(recvbuf[0], fp);count++;if (1024 == count) {fflush(fp);}}}fclose(fp);break;}}FD_CLR(spider->blog->b_sockfd, &read_fds);return 0;fail_recv_response:spider->blog->b_download = BLOG_UNDOWNLOAD;FD_CLR(spider->blog->b_sockfd, &read_fds);return -1;}
在使用select(spider->blog->b_sockfd+1, &read_fds, NULL, NULL, &timeout)函数时,由于select会把timeout结构体给清空,所以若要使用自定义超时时间,必须在select函数返回之后,重新设置timeout结构体。
或者直接传NULL,无限等待,这样也可以,希望不要误导初学者。
3.在查询博客链表长度,我每次重新遍历,可以再改进,原来的代码:
/*********************************************************返回爬虫链表长度*********************************************************/static int spider_size(blog_spider * spider_head){int count = 0;blog_spider *pspider;pspider = spider_head;while (pspider->next) {pspider = pspider->next;count++;}return count;}
- 一些博客和代码的提醒
- 一些牛人的博客和代码
- spring的一些提醒
- 一些好的编程提醒
- 给自己的一些提醒
- 提醒自己每次写代码都应该记住的一些点(更新中...)
- 一些非常有价值的博客和网站
- 记录一些好的博客和论坛
- 一些好用的网址和博客
- 一些稀有的博客连接和知识点
- 对XX技术爱好者的一些提醒
- 用来提醒自己的一些总结性浅见
- 网上看到的jsp操作excel和日期提醒的一些东西
- 给即将参加noip的自己和各位oier的一些提醒
- 如何关闭和打开eclipse的代码里的错误提醒
- 一个access数据库的日期提醒代码
- Qt没有代码提醒功能的解决方法
- 【代码笔记】iOS-提醒时间的选择
- 【C++ Primer】自己动手编写函数 atoi(char *str)
- MFC中如何去掉CPropertySheet界面下方的四个按钮?
- Direct2D 1.1
- Poj 1915 骑士遍历
- PeopleTools 8.50 Hints & Tips: Configuring Report Manager
- 一些博客和代码的提醒
- android中解析后台返回的json字符串
- Java源码中的发现:快速判断一个int值是几位数
- *temp++=1问题
- 分析 BOOL & bool
- C语言的编译过程
- DateTime 结构
- 黑马程序员之_java基础回顾之继承
- 算法一--三塔换位移形之路