Если ваша версия xargs поддерживает флаг -d, тогда это должно сработать
ls | xargs -d, -L 1 echo
-d - это флаг-разделитель
Если у вас нет -d, вы можете попробовать следующее
ls | xargs -I {} echo {}, | xargs echo
Первый xargs позволяет вам указать разделитель, который является запятой в этом примере.
Насколько я знаю, у вас лучший способ. За исключением того, что clock_t
может быть вещественным типом:
time_t
иclock_t
должны быть целыми или вещественно-плавающими типами.
http: //www.opengroup. org / onlinepubs / 009695399 / basedefs / sys / types.h.html
Вероятно, потому, что такты часов не очень четко определены. Вы можете преобразовать его в секунды и распечатать как двойное:
time_in_seconds = (double)time_in_clock_ticks / (double)CLOCKS_PER_SEC;
printf("%g seconds", seconds);
Макрос CLOCKS_PER_SEC заменяется выражением, представляющим количество тактов часов в секунду.
Стандарт C должен поддерживать широкий спектр архитектур, что делает невозможным предоставление каких-либо дополнительных гарантий, кроме того факта, что тип внутренних часов является арифметическим.
В большинстве случаев, вас интересуют временные интервалы, поэтому я бы преобразовал разницу в тактах часов в миллисекунды. unsigned long
достаточно велик, чтобы представить интервал почти в 50 дней, даже если он 32-битный, поэтому он должен быть достаточно большим для большинства случаев:
clock_t start;
clock_t end;
unsigned long millis = (end - start) * 1000 / CLOCKS_PER_SEC;
Одним из способов является использование функции 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;
}