Показать прогресс C - PullRequest
       23

Показать прогресс C

0 голосов
/ 18 февраля 2019

, поэтому я читаю данные, подобные этим

if (contentLengthType == CONTENTLEN_EXIST) {
        printf("Content-Length = %lu\n", contentLength);
    }
{

    int fd = open(dst, O_WRONLY | O_CREAT, 0777);
    int total_read = 0;
    if (fd < 0) {
        return fd;
    }

    while (1) {
        int read = readData(req, buf, sizeof(buf));
        if (read < 0) {
            return read;
        }
        if (read == 0)
            break;
        ret = write(fd, buf, read);
        if (ret < 0 || ret != read) {
            if (ret < 0)
                return ret;
            return -1;
        }
        total_read += read;
    }

Однако, для отображения прогресса записи на основе длины содержимого используется мой индикатор выполнения, как показано здесь int32_t progress_steps = 10;я не уверен, как отобразить прогресс

1 Ответ

0 голосов
/ 19 февраля 2019

Вам просто нужно рассчитать, какая часть общей длины была прочитана до настоящего времени, и масштабировать до желаемого значения для отображения индикации хода выполнения.

Конечно, это работает, только если у вас есть доступная длина контента, которую выпроверьте свой первый if.

По сути, это сводится к некоторым базовым математическим упражнениям, которые вы должны выполнять в каждом раунде цикла.

#define PROGRESS_STEPS 10.0

// calculate part of total task in range 0.0..10.0
float progress = (float)total_read / content_length * PROGRESS_STEPS;

// Apply some rounding according to personal preferences

// Print current progress indicator
printf("%d/%d\n", (int) progress, (int) PROGRESS_STEPS);
// Depending on terminal you might add code to use same line for each output.
...