时间
程序员文章站
2022-06-09 13:09:18
...
记录下linux中关于时间的一些内容。
程序关注的时间可能会有两点:
1.真实时间:这一时间的起点有两个
(1)某个标准点,也就是日历时间,可用于需要数据库记录或文件上打时间戳的程序
(2)进程生命周期的某个固定时点,称为流逝时间,主要用于需要周期性操作或定期从外部输入设备进行度量的程序
2.进程时间:一个进程所使用的时间总量,适用于对程序、算法性能的检查或优化。
日历时间
int gettimeofday(struct timeval *t,struct timezone *tz);
0 on success -1 on error
struct timeval {
time_t tv_sec; /* seconds since Epoch*/suseconds_t tv_usec; /* microseconds */
};
struct tm {
int tm_sec; /* seconds */
int tm_min; /* minutes */
int tm_hour; /* hours */
int tm_mday; /* day of the month */
int tm_mon; /* month */
int tm_year; /* year */
int tm_wday; /* day of the week */
int tm_yday; /* day in the year */
int tm_isdst; /* daylight saving time */
};
gettimeofday()成功调用会返回日历时间到tv所指向的缓冲区,参数tz始终设置为NULL
#include <time.h>
time_t time(time_t *t);
linux还提供了一个本质上相同的系统调用time(),time()返回自Epoch来的秒数,如果t不为空,还会将秒数置于t所指位置如果出错会返回(time_t)-1.
将time_t转为可打印格式
char*ctime(const time_t *t);
日历时间和可打印格式的时间之间的相互转换参照上图.调用ctime() gmtime() localtime() asctime()的任一函数,都可能会覆盖其他函数的返回,且由静态分配的数据结构。所以要使用这些函数的返回信息,需要保存在本地副本中。
进程时间
#include <sys/times.h>
clock_t times(struct times *buf);
struct tms {
clock_t tms_utime; /* user time */
clock_t tms_stime; /* system time */
clock_t tms_cutime; /* user time of children */
clock_t tms_cstime; /* system time of children */
};
times()成功返回的值要除以sysconf(_SC_CLK_TCK),出错返回(clock_t)-1
clock_t clock(void);
clock()返回值的计量单位是CLOCK_PER_SEC要除以这个值来获得进程所使用的CPU时间秒数