Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用curl下载文件的C程序_C_Linux_Unix_Curl - Fatal编程技术网

用curl下载文件的C程序

用curl下载文件的C程序,c,linux,unix,curl,C,Linux,Unix,Curl,我正试图用C编写一个程序来下载一些文件 源代码: #包括 #包括 #包括 #包括 大小写入数据(void*ptr、大小、大小nmemb、文件*流){ 书写的大小; 写入=写入(ptr、大小、nmemb、流); 书面回报; } int main(){ if(curl\u global\u init(curl\u global\u ALL)){ printf(“卷曲错误。正在退出。\n”); 返回1; } 字符链接[3][100]={ "http://download.freeroms.com/ne

我正试图用C编写一个程序来下载一些文件

源代码:
#包括
#包括
#包括
#包括
大小写入数据(void*ptr、大小、大小nmemb、文件*流){
书写的大小;
写入=写入(ptr、大小、nmemb、流);
书面回报;
}
int main(){
if(curl\u global\u init(curl\u global\u ALL)){
printf(“卷曲错误。正在退出。\n”);
返回1;
}
字符链接[3][100]={
"http://download.freeroms.com/nes_roms/08/big_nose_the_caveman.zip",
"http://download.freeroms.com/nes_roms/02/contra.zip",
"http://download.freeroms.com/nes_roms/08/super_mario_bros._(美国、日本);
int n=0,k=0;
字符*最后斜杠;
字符*名称;
CURL*handle=CURL\u easy\u init();
卷曲编码;
文件*文件;

而(n您需要在设置回调数据之前打开该文件。
文件*
是按值存储的,而不是按引用存储的

    file = fopen(name, "wb");       
    curl_easy_setopt(handle, CURLOPT_WRITEDATA, file);
试试这种编码

#include <stdio.h>
#include <curl/curl.h>
#include <curl/types.h>
#include <curl/easy.h>
#include <string>

size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream) {
    size_t written = fwrite(ptr, size, nmemb, stream);
    return written;
}

int main(void) {
    CURL *curl;
    FILE *fp;
    CURLcode res;
    char *url = "http://localhost/aaa.txt";
    char outfilename[FILENAME_MAX] = "C:\\bbb.txt";
    curl = curl_easy_init();
    if (curl) {
        fp = fopen(outfilename,"wb");
        curl_easy_setopt(curl, CURLOPT_URL, "http://localhost/aaa.txt");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
        res = curl_easy_perform(curl);
        /* always cleanup */
        curl_easy_cleanup(curl);
        fclose(fp);
    }
    return 0;
}
#包括
#包括
#包括
#包括
#包括
大小写入数据(void*ptr、大小、大小nmemb、文件*流){
写入的大小=写入(ptr、大小、nmemb、流);
书面回报;
}
内部主(空){
卷曲*卷曲;
文件*fp;
卷曲编码;
char*url=”http://localhost/aaa.txt";
char outfilename[FILENAME\u MAX]=“C:\\bbb.txt”;
curl=curl_easy_init();
if(curl){
fp=fopen(出口名称,“wb”);
curl\u easy\u setopt(curl,CURLOPT\u URL,“http://localhost/aaa.txt");
curl\u easy\u setopt(curl,CURLOPT\u WRITEFUNCTION,write\u data);
curl_easy_setopt(curl,CURLOPT_WRITEDATA,fp);
res=旋度(curl)\u容易执行(curl);
/*总是清理*/
旋度\轻松\清洁(旋度);
fclose(fp);
}
返回0;
}

什么是curl\u easy\u init()返回?请看[此][1]页,已经讨论过了。[1]:您应该检查curl\u easy\u init()的返回是否正确!=NULL@dckuehn它不返回任何内容,当程序到达该代码时,它关闭并将分段错误写入屏幕。
#include <stdio.h>
#include <curl/curl.h>
#include <curl/types.h>
#include <curl/easy.h>
#include <string>

size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream) {
    size_t written = fwrite(ptr, size, nmemb, stream);
    return written;
}

int main(void) {
    CURL *curl;
    FILE *fp;
    CURLcode res;
    char *url = "http://localhost/aaa.txt";
    char outfilename[FILENAME_MAX] = "C:\\bbb.txt";
    curl = curl_easy_init();
    if (curl) {
        fp = fopen(outfilename,"wb");
        curl_easy_setopt(curl, CURLOPT_URL, "http://localhost/aaa.txt");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
        res = curl_easy_perform(curl);
        /* always cleanup */
        curl_easy_cleanup(curl);
        fclose(fp);
    }
    return 0;
}