名字 | 用处 |
---|---|
time_t time(time_t *t) | 获取系统时间,获取的为秒数 |
int stime(time_t *t) | 设置系统时间,设置的为秒数 |
int gettimeofday(struct timeval *tv,struct timezone *tz) | 设置系统时间,可获取秒数与微秒数 |
int settimeofday(struct timeval *tv,struct timezone *tz) | 设置系统时间,可设置秒数与微秒数 |
以下是struct timeval的说明
在debian linux的man页中对gettimeofday函数的说明中,有这样一个说明:
DESCRIPTION
The functions gettimeofday and settimeofday can get and set the time as
well as a timezone. The tv argument is a timeval struct, as specified
in <sys/time.h>:
struct timeval {
time_t tv_sec; /* seconds */
suseconds_t tv_usec; /* microseconds */
};
其中对tv_usec的说明为时间的毫秒部分。 而在实际中,该函数以及Linux内核返回的timeval
类型的时间值,tv_usec代表的是微秒精度(10的-6次方秒)。
在系统启动时,Linux操作系统将时间从CMOS中读到系统时间变量中,以后修改时间通过修改系统时间实现。为了保持系统时间与CMOS时间的一致性,Linux每隔一段时间会将系统时间写入CMOS。由于该同步是每隔一段时间(大约是11分钟)进行的,在我们执行date -s后,如果马上重起机器,修改时间就有可能没有被写入CMOS,这就是问题的原因。如果要确保修改生效可以执行如下命令。