Что делает функция Timespec diff - C (СИ)
Формулировка задачи:
#include <time.h>
#include <stdio.h>
timespec diff(timespec start, timespec end)
{
timespec temp;
if ((end.tv_nsec-start.tv_nsec)<0) {
temp.tv_sec = end.tv_sec-start.tv_sec-1;
temp.tv_nsec = 1000000000+end.tv_nsec-start.tv_nsec;
} else {
temp.tv_sec = end.tv_sec-start.tv_sec;
temp.tv_nsec = end.tv_nsec-start.tv_nsec;
}
return temp;
}
int main(int argc, char ** argv)
{
FILE * f = fopen("timestamp_start.bin", "r");
timespec start, now, d;
fread(&start, sizeof(start), 1, f);
clock_gettime(CLOCK_MONOTONIC, &now);
fclose(f);
d = diff(start, now);
f = fopen("totallog.txt", "a");
long usecs = ((long)d.tv_nsec / 1000) + (d.tv_sec * 1000000);
fprintf(f, "%ld usecs: %s\n", usecs, argv[1]);
fclose(f);
return 0;
}Решение задачи: «Что делает функция Timespec diff»
timespec diff(timespec start, timespec end)
{
timespec temp;
if ((end.tv_nsec-start.tv_nsec)<0) {
temp.tv_sec = end.tv_sec-start.tv_sec-1;
temp.tv_nsec = 1000000000+end.tv_nsec-start.tv_nsec;
} else {
temp.tv_sec = end.tv_sec-start.tv_sec;
temp.tv_nsec = end.tv_nsec-start.tv_nsec;
}
return temp;
}
Объяснение кода листинга программы
В данном коде реализована функция Timespec diff, которая вычисляет разницу между двумя временами, представленными в формате Timespec. В первой части условия проверяется, является ли значение nanoсекунд во втором времени меньше, чем в первом. Если это так, то в переменной temp обновляются значения секунд и nanoсекунд. Значение секунд уменьшается на единицу, а значение nanoсекунд увеличивается на 1000000000 (что равно 1 секунде в nanoсекундах). Во второй части условия, которая выполняется, если значение nanoсекунд во втором времени больше или равно значению nanoсекунд в первом времени, в переменной temp обновляются значения секунд и nanoсекунд. Значение секунд уменьшается на количество секунд, равное разности значений секунд во втором и первом временах, а значение nanoсекунд увеличивается на разность значений nanoсекунд во втором и первом временах. В конце функция возвращает время, представленное в переменной temp.