空间分配与管理方案。
在内存中使用缓冲空间,以快速的得到、存储数据。
统一各种请求的结构,应该合理利用并在每次用完后进行回收。比如,ROBOT.TXT文件,HTTP请求头及相应的应答。这种方式,在站点数目数量相当庞大的情况下,非常有必要。
在页面的抓取部分和保存部分之间设置合适的接口,直接进行数据交换,从而使系统不必分配更多的空间来缓冲数据。数据缓冲功能由保存部分内部实现。
static int handler(void * data) { Response *r = (Response *)data; if (strstr(r->header->content_type, "text/html") == NULL) return MODULE_ERR; char *fn = url2fn(r->url); int fd = -1; if ((fd = open(fn, O_WRONLY|O_CREAT|O_TRUNC, 0666)) < 0) { return MODULE_ERR; } int left = r->body_len; int n = -1; while (left) { if ((n = write(fd, r->body, left)) < 0) { // error close(fd); unlink(fn); free(fn); return MODULE_ERR; } else { left -= n; } } close(fd); free(fn); return MODULE_OK; }