一些博客和代码的提醒

本文分享了作者整理的C++笔记,提醒读者这些笔记仅用于复习基础语法,不具高参考价值;同时介绍了优快云博客备份工具的使用,指出代码存在效率提升空间及可能误导初学者的使用方法。详细解析了select函数的使用方法,并提供了改进建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

提醒:

最近没有发表什么文章,但偶然发现博客排名一直向前走,才让我又回到了博客的空间来。

1.最近有些网友在关注我写的C++的笔记,我想说的是:那是前段时间自己复习基础语法,顺便写下来的,没有多大的参考价值,希望需要的网友参考比较完整的书籍,不希望网友浪费宝贵的时间。


2.在一月份曾经发布了C语言版本(Linux平台)的优快云博客备份工具,有很多感兴趣的,初学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_DEBUG
			fprintf(stderr, "select: %s\n", strerror(errno));
			#endif
			return -1;
		}
		else if (0 == ret) {
			/*超时, 继续轮询*/
			#ifdef SPIDER_DEBUG
			fprintf(stderr, "select timeout: %s\n", spider->blog->b_title);
			#endif
			goto 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;
}


每次重新遍历链表,效率很低,可以设置一个全局变量来保存长度。也可以设置一个指向最后一个节点的指针,每次求长度只需与首节点地址想减,再除以指针大小,就可以得到长度。
为了设计款能够有效聚合校园生活信息的APP,首先需要从用户的需求出发,详细分析目标用户群体的特点和需求,即XXXX生的日常生活和学习需求。在此基础上,定义APP的核心功能和服务范围,包括但不限于选课指南、考试资源、兼职信息、生活充值等服务。 参考资源链接:[校园生活APP:服务XXXX生的创新创业计划](https://wenku.youkuaiyun.com/doc/7ji9n8gsq2?spm=1055.2569.3001.10343) 接下来,进行市场调研,了解同类APP的现状、优缺点以及目标用户对此类APP的使用体验反馈。这步骤将帮助我们确定产品的差异化特征,并据此制定出创新点和改进方向。 根据调研结果,设计APP的架构和用户界面。架构设计要考虑到数据的高效采集、存储、处理和展示,以及第三方平台的接口对接。用户界面设计则需要注重用户体验,确保操作简便、界面友好。 确定技术路线后,开始APP的开发工作。开发过程中,选择合适的开发工具和框架,如React Native或Flutter等跨平台开发框架,可以快速构建iOS和安卓双端应用。对于数据聚合,可以利用爬虫技术定时从校园网站、合作伙伴网站等来源抓取信息,并存储于服务器。开发中还应考虑到数据的安全性和隐私保护措施。 对于信息的更新及时性与准确性,可以设立后台管理系统,由专业团队负责日常的信息维护和更新,同时设置用户反馈机制,鼓励用户上报错误信息或提出建议。利用机器学习等技术优化信息分类和匹配准确性。 测试阶段,进行全面的系统测试、性能测试和用户测试,确保APP的稳定性和易用性。在APP上线后,进行持续的监控和迭代更新,根据用户反馈不断优化功能和提升服务质量。 总结来说,开发款校园生活APP需要深入理解用户需求,合理规划产品功能,采用合适的开发技术和架构,并且注重后期的运营和维护。为了深入了解如何将这些步骤具体实现,建议参考《校园生活APP:服务XXXX生的创新创业计划》。这份文档不仅提供了产品规划的全面视角,还包括市场分析和运营策略,是解决当前问题的有力支持。 参考资源链接:[校园生活APP:服务XXXX生的创新创业计划](https://wenku.youkuaiyun.com/doc/7ji9n8gsq2?spm=1055.2569.3001.10343)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值