Mantén la atención porque en este escrito vas a encontrar el resultado que buscas.
Solución:
Tu medidor.
#include
int progress_func(void* ptr, double TotalToDownload, double NowDownloaded,
double TotalToUpload, double NowUploaded)
// ensure that the file to be downloaded is not empty
// because that would cause a division by zero error later on
if (TotalToDownload <= 0.0))
return 0;
// how wide you want the progress meter to be
int totaldotz=40;
double fractiondownloaded = NowDownloaded / TotalToDownload;
// part of the progressmeter that's already "full"
int dotz = (int) round(fractiondownloaded * totaldotz);
// create the "meter"
int ii=0;
printf("%3.0f%% [",fractiondownloaded*100);
// part that's full already
for ( ; ii < dotz;ii++)
printf("=");
// remaining part (spaces)
for ( ; ii < totaldotz;ii++)
printf(" ");
// and back to line begin - do not forget the fflush to avoid output buffering problems!
printf("]r");
fflush(stdout);
// if you don't return 0, the transfer will be aborted - see the documentation
return 0;
De la documentación curl
CURLOPT_PROGRESSFUNCTION
Puntero de función que debe coincidir con el prototipo curl_progress_callback que se encuentra en . Esta función es llamada por libcurl en lugar de su equivalente interno con un intervalo frecuente durante la operación (aproximadamente una vez por segundo) sin importar si los datos se transfieren o no. Los valores de argumento desconocidos/no utilizados que se pasan a la devolución de llamada se establecerán en cero (como si solo descargara datos, el tamaño de carga seguirá siendo 0). Devolver un valor distinto de cero de esta devolución de llamada hará que libcurl cancele la transferencia y devuelva CURLE_ABORTED_BY_CALLBACK.
Entonces:
Usted proporciona una función que se ve así
int progress_func(void* ptr, double TotalToDownload, double NowDownloaded, double TotalToUpload, double NowUploaded)
// It's here you will write the code for the progress message or bar
Y algunas opciones extra después de las opciones existentes
curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp); // already there
// Internal CURL progressmeter must be disabled if we provide our own callback
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, FALSE);
// Install the callback function
curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, progress_func);
Eso es todo lo que hay que hacer
Reseñas y calificaciones de la guía
Si guardas algún titubeo y capacidad de perfeccionar nuestro artículo eres capaz de realizar una interpretación y con gusto lo estudiaremos.