times 用于获取当前进程和其子进程的时间统计信息。
1.头文件
#include <sys/times.h>
2.函数原型
clock_t times(struct tms *buf);
3.参数
buf: 指向 tms 结构的指针,该结构用于存储返回的 CPU 时间信息。
tms 结构通常定义如下:
struct tms {
clock_t tms_utime; // 用户模式下的 CPU 时间
clock_t tms_stime; // 系统模式下的 CPU 时间
clock_t tms_cutime; // 子进程用户模式下的 CPU 时间
clock_t tms_cstime; // 子进程系统模式下的 CPU 时间
};
4.返回值
成功: 返回调用时 CPU 的“时钟”值,单位是时钟滴答(通常是每秒 100 Hz 或更高)。
失败: 返回 -1,并设置 errno 以指示错误。
5.示例:(使用times获取当前进程时间)
| #include <stdio.h>
#include <sys/times.h> #include <unistd.h> int main() { struct tms buf; clock_t start, end; start = times(&buf); // 获取开始时的 CPU 时间 // 模拟一些计算 for (volatile long i = 0; i < 100000000; i++); end = times(&buf); // 获取结束时的 CPU 时间 // 输出用户模式和系统模式的 CPU 时间 printf("User CPU time: %ld ticksn", buf.tms_utime); printf("System CPU time: %ld ticksn", buf.tms_stime); printf("Child User CPU time: %ld ticksn", buf.tms_cutime); printf("Child System CPU time: %ld ticksn", buf.tms_cstime); // 计算总 CPU 使用时间 printf("Total CPU time: %ld ticksn", end - start); return 0; } |
6.编译并测试
| User CPU time: 3 ticks
System CPU time: 0 ticks Child User CPU time: 0 ticks Child System CPU time: 0 ticks Total CPU time: 4 ticks |
一个 tick 通常表示 CPU 时钟的一个周期。CPU 的时钟频率以赫兹(Hz)为单位,表示每秒钟 CPU 进行多少次时钟周期。1 GHz 的 CPU 频率意味着每秒钟有 10 亿个时钟周期(ticks)。
例如,如果 CPU 时钟频率为 1 GHz,那么每个 tick 的时间是 1 纳秒(1 GHz = 10⁹ Hz,因此 1 秒钟有 10⁹ 个 ticks)。
289