我需要在C中创建一个连接到Web服务器并下载其index.html文件的程序。我已经正确地完成了这项工作,但我正在努力完成该计划的第二部分,规范说:
如果页面包含完整的http引用,则启动并发 线程获取该页面并将其作为文件保存到磁盘(如前所述)。一个 完整参考意味着以“http://”开头,以“.html”结尾
虽然我已经完成了启动Thread的代码,但我不知道如何获取所有URL。
这是我希望我的线程执行的伪代码(我觉得它应该有效):
Open File;
Read File;
Fill the buffer;
LOOP:
Search for "http://", Save Position1
Search for ".html" from the previous saved position, Save Position2
Save all the string that goes from Save Position1 to Save Position2 in a txt.file using the System Call Write.
我尝试过像strstr这样的函数,甚至计算文件的大小,并尝试使用巨大的for语句中的条件但是任何东西都返回了所需的结果。
请记住,我是C编程的先行者>。<
答案 0 :(得分:0)
这是你可以使用strstr从文件中提取链接的方法:
char str[32]="http://example.com/index.html";
char *p = strstr(str, "http://"), *q;
if (p != NULL) {
q = strstr(p, ".html");
if (q != NULL) {
for (char *x = p; x < q + 5; x++)
printf("%c", *x);
printf("\n");
}
}
另请注意,虽然strstr是线程安全的,但是针和干草堆指针必须受到互斥锁或信号量的保护。在线程环境中使用它时要小心。
代替上面代码中的printf,使用write,fwrite或fprintf编写您喜欢的文件I / O函数。