2015-09-10 58 views
0

我正在構建一個簡單的C程序,該程序使用scanf()的用戶輸入參數(URL),如下面的代碼所示。我現在正在尋找最佳的「標準」方式來讀取/寫入遠程文件到本地文件......然後,我將對新的本地源文件執行grep(搜索)操作。使用C標準庫讀取/寫入文件的最佳方式

// CODE

#include <stdio.h> 

int main(void){ 
    char url[255]; 

    //USER INPUT URL 
    printf("ENTER URL: "); 
    scanf("%s", &url); 

    //GET FILE AT URL(REMOTE) AND COPY TO (LOCAL) 




    //RETURN 
    return 0; 
} 
+0

相關:http://stackoverflow.com/q/3471122/694576 – alk

回答

1

你可以使用libcurl的,或只是掏出並使用wgetcurl,誠實。

char command[1024]; 
snprintf(command, 1024, "wget -c '%s'", url); 
system(command); // add error handling 

這將花費相當少的工作量。

+0

是的,我看了一下,工作正常..但有一個標準的方式,沒有加載另一個第三方庫在 –

+2

我不認爲所以。什麼讓你有那個想法?從網絡服務器讀取文件不是 - 無論如何 - 一項簡單的任務。只是人們一直這樣做並不會讓它變得微不足道。高級編程語言的存在是有原因的。 – sehe

+0

啊,goodshttt! Yea Ima只是掏出了CMD,現在正在吃午飯,當我回來測試它時,我會標記它是正確的。謝謝謝謝! –

1

你可以使用像wget創建fork()和執行命令,curlexeclexeclexeclp和之後,你可以用它來讀取該文件與fgets和附加符合fputs

+1

謝謝Hoenir,是基本上相同的想法,我用fork()和捲曲就像你在這裏。 –

0

我認爲你正在尋找某種HTML解析器,有包括捲曲LIB一種可能性:

#include <curl/curl.h> 
#include <stdio.h> 
#include <stdlib.h> 

#define FILE_SIZE 10000 

int main(void) 
{ 
curl_global_init(CURL_GLOBAL_ALL); 

CURL * myHandle; 
CURLcode setop_result; 
FILE *file; 

if((file = fopen("webpage.html", "wb")) == NULL) 
{ 
    perror("Error"); 
    exit(EXIT_FAILURE); 
} 

if((myHandle = curl_easy_init()) == NULL) 
{ 
    perror("Error"); 
    exit(EXIT_FAILURE); 
} 

if((setop_result = curl_easy_setopt(myHandle, CURLOPT_URL, "http://cboard.cprogramming.com/")) != CURLE_OK) 
{ 
    perror("Error"); 
    exit(EXIT_FAILURE); 
} 

    if((setop_result = curl_easy_setopt(myHandle, CURLOPT_WRITEDATA, file))  != CURLE_OK) 
{ 
    perror("Error"); 
    exit(EXIT_FAILURE); 
} 

if((setop_result = curl_easy_perform(myHandle)) != 0) 
{ 
    perror("Error"); 
    exit(EXIT_FAILURE); 
} 
curl_easy_cleanup(myHandle); 
fclose(file); 
puts("Webpage downloaded successfully to webpage.html"); 

return 0; 
} 

其在下面

論壇上enter link description here

發現後#10
+0

搜索網絡蜘蛛或網絡爬蟲有非常簡單的... – Cydyn

+0

是的,我知道所有關於libcurl,我只是尋找一個好的「標準」的做法,如果有一個。我認爲只用'execl'執行「curl」命令是唯一的方法...... –

相關問題