libcurl
과 약간 이상한 문제가 있습니다. 기본적으로 HTTP 서버에서 파일을 다운로드하는 동안 파일 끝에 가비지 바이트가 출력됩니다. 파일 은이 1,710,017 바이트가되어야하지만 라이브러리는 대신 1,712,128 개 (2,111 개)를 씁니다. 후자의 숫자가 2^12 (및 2^13이지만 다른 경우에는 2^12의 배수를 따르는)이기 때문에 버퍼링 문제라고 생각합니다. 여분의 데이터는 파일의 다른 부분에서 읽은 각 바이트 수 (한 번에 4 개의 주소 중 하나에서 끝까지 읽는 것만 보입니다) 또는 한 경우에는 CD
이 2,111 번 반복됩니다.파일을 다운로드 할 때 libcurl이 여분의 후행 바이트를 출력합니다.
관련 코드 :
std::string url; // defined elsewhere
FILE* data; // initialized elsewhere with option "wb"
CURL* query = curl_easy_init();
curl_easy_setopt(query, CURLOPT_WRITEDATA, data);
curl_easy_setopt(query, CURLOPT_URL, url);
curl_easy_setopt(query, CURLOPT_FOLLOWLOCATION, true);
curl_easy_setopt(query, CURLOPT_SSL_VERIFYPEER, false);
CURLcode res = curl_easy_perform(query);
또한 : 간단한 기록 콜백을 사용하는 경우와 동일한 문제가 발생하여, 문제가 주어진 원격 서버뿐만 아니라 특정 하나를 발생한다.
편집 # 1 : 동일한 Windows 파일 (동일한 라이브러리 파일이있는 두 대의 컴퓨터에서 테스트 됨)에서만 Windows 용으로 복제 할 수 있습니다. 데비안에서 작동합니다.
편집 # 2 :libcurl
이 내 랩톱에 내장 된 경우에도 발생합니다. 추가 컨텍스트를 제공하기 위해 Windows 10에서 VC14 환경을 사용하는 Marc Hörsken의 ZIP (공식 컬 다운로드 페이지에서 사용 가능)을 구축하고 있습니다.
이 https://curl.haxx.se/libcurl/c/getinmemory.html을 보셨습니까? – PnotNP
@ NulledPointer 관련성이 보이지 않습니까? 또한 OP에 대한 마지막 편집을 확인하십시오. – caseif
코드에 문제가없는 것 같아요. 특정 컴퓨터에서 컴파일 할 때만 발생하기 때문에, 그 컴퓨터가 libcurl의 버그가있는 버전을 사용하고 있다고 말하고 싶습니다. –