Программирование для Linux. Профессиональный подход
Шрифт:
Перечислим наиболее интересные поля этой структуры.
■
ru_utime
. Здесь находится структура типа timeval
, в которой указано, сколько пользовательского времени (в секундах) ушло на выполнение процесса. Это время, затраченное центральным процессором на выполнение программного кода, а не системных вызовов. ■
ru_stime
. Здесь находится структура типа timeval
, в которой указано, сколько системного времени (в секундах) ушло на выполнение процесса. Это время, затраченное центральным процессором на выполнение
■
ru_maxrss
. Это максимальный объем физической памяти, которую процесс занимал в какой-то момент своего выполнения. В листинге 8.5 приведена функция, которая показывает, сколько пользовательского и системного времени потребил текущий процесс.
Листинг 8.5. (prinf-cpu-times.c) Определение пользовательского и системного времени, затраченного на выполнение текущего процесса
#include <stdio.h>
#include <sys/resource.h>
#include <sys/time.h>
#include <unistd.h>
void print_cpu_time {
struct rusage usage;
getrusage(RUSAGE_SELF, &usage);
printf("CPU time: %ld.%061d sec user, %ld.%061d sec system\n",
usage.ru_utime.tv_sec, usage.ru_utime.tv_usec,
usage.ru_stime.tv_sec, usage.ru_stime.tv_usec);
}
8.7, Функция gettimeofday: системные часы
Функция
gettimeofday
определяет текущее системное время. В качестве аргумента она принимает структуру типа timeval
, в которую записывается значение времени (в секундах), прошедшее с начала эпохи UNIX (1-е января 1970 г., полночь по Гринвичу). Это значение разделяется на два поля. В поле tv_sec
хранится целое число секунд, а в поле tv_usec
— дополнительное число микросекунд. У функции есть также второй аргумент, который должен быть равен NULL
. Функция объявлена в файле <sys/time.h>
. Результат, возвращаемый функцией
gettimeofday
, мало подходит для отображения на экране, поэтому существуют библиотечные функции localtime
и strftime
, преобразующие это значение в нужный формат. Функция localtime
принимает указатель на число секунд (поле tv_sec
структуры timeval
) и возвращает указатель на структуру типа tm
. Эта структура содержит поля, заполняемые параметрами времени в соответствии с локальным часовым поясом: ■
tm_hour
, tm_min
, tm_sec
— текущее время (часы, минуты, секунды); ■
tm_year
, tm_mon
, tm_day
—
■
tm_wday
— день недели (значение 0 соответствует воскресенью); ■
tm_yday
— день года; ■
tm_isdst
— флаг, указывающий, учтено ли летнее время. Функция
strftime
на основании структуры tm
создает строку, отформатированную по заданному правилу. Формат напоминает тот, что используется в функции printf
: указывается строка с кодами, определяющими включаемые поля структуры. Например, форматная строка вида "%Y-%m-%d %Н:%М:%S"
соответствует такому результату:
2001-01-14 13:09:42
Функции
strftime
необходимо задать указатель на текстовый буфер, куда будет помещена полученная строка, длину буфера, строку формата и указатель на структуру типа tm
. Следует учесть, что ни функция localtime
, ни функция strftime
не учитывают дробную часть текущего времени (поле tv_usec
структуры timeval
). Об этом должен позаботиться программист. Объявления функций
localtime
и strftime
находятся в файле <time.h>
. Программа, показанная в листинге 8.6, отображает текущие дату и время с точностью до миллисекунды.
Листинг 8.6. (print-time.c) Отображение даты и времени
#include <stdio.h>
#include <sys/time.h>
#include <time.h>
#include <unistd.h>
void print_time {
struct timeval tv;
struct tm* ptm;
char time_string[40];
long milliseconds;
/* Определение текущего времени и преобразование полученного
значения в структуру типа tm. */
gettimeofday(&tv, NULL);
ptm = localtime(&tv.tv_sec);
/* Форматирование значения даты и времени с точностью
до секунды. */
strftime(time_string, sizeof(time_string),
"%Y-%m-%d %H:%M:%S", ptm);
/* Вычисление количества миллисекунд. */
milliseconds = tv.tv_usec / 1000;
/* Отображение даты и времени с указанием
числа миллисекунд. */
printf("%s.%03ld\n", time_string, milliseconds);
}
Поделиться:
Популярные книги
Стеллар. Трибут
2. Стеллар
Фантастика:
боевая фантастика
рпг
8.75
рейтинг книги
Его огонь горит для меня. Том 2
2. Мир Карастели
Фантастика:
юмористическая фантастика
5.40
рейтинг книги
На границе империй. Том 9. Часть 4
17. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
Наследник
1. Рюрикова кровь
Фантастика:
научная фантастика
попаданцы
альтернативная история
8.69
рейтинг книги

Совершенно несекретно
15. Девяностые
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Ваше Сиятельство 2
2. Ваше Сиятельство
Фантастика:
фэнтези
альтернативная история
аниме
5.00
рейтинг книги
Прометей: каменный век II
2. Прометей
Фантастика:
альтернативная история
7.40
рейтинг книги
Единственная для темного эльфа 3
3. Мир Верея. Драконья невеста
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Жандарм
1. Жандарм
Фантастика:
попаданцы
альтернативная история
аниме
4.11
рейтинг книги
Долгий путь домой
Вселенная EVE Online
Фантастика:
космическая фантастика
попаданцы
6.20
рейтинг книги
Прогрессор поневоле
2. Фараон
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Наследие Маозари 6
6. Наследие Маозари
Фантастика:
попаданцы
постапокалипсис
рпг
фэнтези
эпическая фантастика
5.00
рейтинг книги
Я еще не барон
1. Дорогой барон!
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Лолита
Проза:
классическая проза
современная проза
8.05