Что корректный путь состоит в том, чтобы использовать printf для печати clock_t?

Если ваша версия xargs поддерживает флаг -d, тогда это должно сработать

ls  | xargs -d, -L 1 echo

-d - это флаг-разделитель

Если у вас нет -d, вы можете попробовать следующее

ls | xargs -I {} echo {}, | xargs echo

Первый xargs позволяет вам указать разделитель, который является запятой в этом примере.

29
задан David Cain 15 December 2012 в 05:30
поделиться

4 ответа

Насколько я знаю, у вас лучший способ. За исключением того, что clock_t может быть вещественным типом:

time_t и clock_t должны быть целыми или вещественно-плавающими типами.

http: //www.opengroup. org / onlinepubs / 009695399 / basedefs / sys / types.h.html

12
ответ дан 28 November 2019 в 01:30
поделиться

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

time_in_seconds = (double)time_in_clock_ticks / (double)CLOCKS_PER_SEC;
printf("%g seconds", seconds);

Макрос CLOCKS_PER_SEC заменяется выражением, представляющим количество тактов часов в секунду.

11
ответ дан 28 November 2019 в 01:30
поделиться

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

В большинстве случаев, вас интересуют временные интервалы, поэтому я бы преобразовал разницу в тактах часов в миллисекунды. unsigned long достаточно велик, чтобы представить интервал почти в 50 дней, даже если он 32-битный, поэтому он должен быть достаточно большим для большинства случаев:

clock_t start;
clock_t end;
unsigned long millis = (end - start) * 1000 / CLOCKS_PER_SEC;
3
ответ дан 28 November 2019 в 01:30
поделиться

Одним из способов является использование функции gettimeofday. Разницу можно обнаружить, используя эту функцию:

unsigned long  diff(struct timeval second, struct timeval first)
{
    struct timeval  lapsed;
    struct timezone tzp;
    unsigned long t;

    if (first.tv_usec > second.tv_usec) {
        second.tv_usec += 1000000;
        second.tv_sec--;
    }

    lapsed.tv_usec = second.tv_usec - first.tv_usec;
    lapsed.tv_sec  = second.tv_sec  - first.tv_sec;
    t = lapsed.tv_sec*1000000 + lapsed.tv_usec;

    printf("%lu,%lu - %lu,%lu = %ld,%ld\n",
           second.tv_sec, second.tv_usec,
           first.tv_sec,  first.tv_usec,
           lapsed.tv_sec, lapsed.tv_usec);

    return t;
}
1
ответ дан 28 November 2019 в 01:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: