2011-05-01 8 views
1

이 코드로 컬 라이브러리를 사용하여 내 서버에서 테스트 파일을 다운로드하기 위해 노력하고있어 :분할 오류 사용하여 컬을

#define CURL_STATICLIB 

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

size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream) 
{ 
    size_t written; 

    written = fwrite(ptr, size, nmemb, stream); 
    return written; 
} 

int main(void) 
{ 
    CURL *curl; 
    FILE *fp; 
    CURLcode res; 

    char *url = "http://pixhost.tk/test.txt"; 
    char outfilename[FILENAME_MAX] = "/Users/Nathan/Desktop"; 
    curl = curl_easy_init(); 

    if (curl) 
    { 
     fp = fopen(outfilename, "wb"); 

     curl_easy_setopt(curl, CURLOPT_URL, url); 
     curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data); 
     curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp); 

     res = curl_easy_perform(curl); 

     curl_easy_cleanup(curl); 
     fclose(fp); 
    } 

    return 0; 
} 

그리고 이런 식으로 컴파일 :

$ gcc main.c -lcurl -o curltest 

을하지만 때를 그것을 실행하십시오 나는 분할 오류 오류가 발생했습니다. 이 문제를 해결하려면 어떻게해야합니까?

답변

3

나는 컬에 익숙하지 않은,하지만 난이 말도 안되는 말을하면 나를 도와, 그래서 용서 수있는 두 가지 :

  1. char *url = "http://pixhost.tk/test.txt"; 읽기 전용 문자열, 그래서이 공개 할 수 const char *url = "http://pixhost.tk/test.txt";로 변경 컴파일하는 동안 문제가 발생했습니다.
  2. 당신은 fopen의 결과를 확인하지 못했을 것입니다. segfault를 설명하는 것이 실패했을 수도 있고, AFAIK 디렉토리 여야하는 "/ Users/Nathan/Desktop"을 열려고 시도하기 때문에 나에게 좋을 것 같습니다. 내가 곱슬 곱슬와 함께 일부터
+0

2에 내기를 걸었습니다. – a3nm

+0

Me, a3_nm. 그가 쓰기를 위해 디렉토리를 열려고하는 것 같습니다. –

0

그것은 오랜만이야, 난, 난 당신이 이런 식으로에 fwrite를 호출해야한다고 생각이 세그먼트 폴트를 야기 확실하지 않다 :

fwrite(ptr, 1, nmemb * size, stream); 

에 fwrite이 수를 반환하므로 그리고 size은 (나는)이 하나임을 보장하지 않습니다. 그리고 fwrite가 반환하는 값을 반환하기 때문에 함수가 실제로 쓴 바이트 수를 반환하기로되어 있기 때문에 실제로 쓰는 것보다 적은 바이트를 반환한다고 생각합니다.