■ ru_stime
timeval, в которой указано, сколько системного времени (в секундах) ушло на выполнение процесса. Это время, затраченное центральным процессором на выполнение системных вызовов от имени данного процесса.■ ru_maxrss
В листинге 8.5 приведена функция, которая показывает, сколько пользовательского и системного времени потребил текущий процесс.
#include
#include
#include
#include
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, в которую записывается значение времени (в секундах), прошедшее с начала tv_sec хранится целое число секунд, а в поле tv_usec — дополнительное число микросекунд. У функции есть также второй аргумент, который должен быть равен NULL. Функция объявлена в файле .Результат, возвращаемый функцией gettimeofday()
localtime() и strftime(), преобразующие это значение в нужный формат. Функция localtime() принимает указатель на число секунд (поле tv_sec структуры timeval) и возвращает указатель на структуру типа tm. Эта структура содержит поля, заполняемые параметрами времени в соответствии с локальным часовым поясом:■ tm_hour
tm_min, tm_sec — текущее время (часы, минуты, секунды);■ tm_year
tm_mon, tm_day — год, месяц, день;■ tm_wday
■ 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() находятся в файле .Программа, показанная в листинге 8.6, отображает текущие дату и время с точностью до миллисекунды.
#include
#include
#include
#include
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);
}
8.8. Семейство функций mlock(): блокирование физической памяти