/* 编写一个程序, 由主线程从键盘接收输入的网址(如http://www.baidu.com), 由子线程完成网址的下载并写入到tmpN.html临时文件中, 并在子线程中打印输出结果.输入exit时, 退出程序. 【提示】基于execlp()函数执行`curl 网址 > tmp1.html`, 其中N是第几次请求. */ #include #include #include #include #include typedef struct url_info_s { char *url; int N; } URL_INFO; void *download(void *data) { URL_INFO *info = (URL_INFO *)data; char end_name[20]; sprintf(end_name, "tmp%d.html", info->N); // execlp("curl", "curl", info->url, "-o", end_name, NULL); // 注意:这里使用 "-o" 参数指定输出文件名 char command[200]; sprintf(command, "curl %s -o %s", info->url, end_name); system(command); sprintf(command, "cat %s", end_name); system(command); return NULL; } // void *view(void *data) // { // URL_INFO *info = (URL_INFO *)data; // char end_name[20]; // sprintf(end_name, "tmp%d.html", info->N); // execlp("cat", "cat", end_name, NULL); // // 使用 execlp 调用 cat 命令打印输出结果 // return NULL; // } int main() { int n = 1; // 初始化 n 的值为 1 char buf[100]; while (1) { printf("请输入网址(输入exit退出):"); fgets(buf, sizeof(buf), stdin); buf[strlen(buf) - 1] = '\0'; if (strcmp(buf, "exit") == 0) { break; } URL_INFO urls; urls.url = buf; urls.N = n++; pthread_t download_tid, view_tid; pthread_create(&download_tid, NULL, download, &urls); pthread_join(download_tid, NULL); // pthread_create(&view_tid, NULL, view, &urls); // pthread_join(view_tid, NULL); } printf("---over---\n"); return 0; }