
RTC时间 *** 作:
1rtc时间是由rtc硬件控制的,所以在linux中想要修改和获取rtc时间就只能通过驱动的接口来获取和修改。
intrtc_test(void)
{
structrtc_timertc;
intfd=-1;
intret=-1;
fd=open("/dev/rtc0",O_RDWR);
if(fd<0){
return-1;
}
ret=ioctl(fd,RTC_RD_TIME,&rtc);
if(ret<0){
return-1;
}
printf("\nCurrentRTCdata/timeis%d-%d-%d,%02d:%02d:%02d\n",rtctm_mday,rtctm_mon+1,
rtctm_year+1900,rtctm_hour,rtctm_min,rtctm_sec);
ret=ioctl(fd,RTC_SET_TIME,&rtc);
if(ret<0){
return-1;
}
return0;
}
2除了上面这种方式 *** 作rtc时间以外,linux中也有一个命令可以简化rtc时间 *** 作,hwclock,比如,可以通过system("hwclock-w");系统调用来把xtime设置到rtc硬件。
墙上时间(realtime、xtime):
linux系统中主要使用的就是xtime,它是系统运行的基础,很多程序都是依赖于xtime来运行的,接下来将介绍将如何 *** 作xtime。
1获取、设置微秒级别的时间:
#include
#include
structtimeval
{
inttv_sec;
inttv_usec;
};
intgettimeofday(structtimevaltv,structtimezonetz);
intsettimeofday(conststructtimevaltv,conststructtimezonegz);
功能描述:
gettimeofday()获取当前时间,有tv指向的结构体返回。
settimeofday()把当前时间设成由tv指向的结构体数据。当前地区信息则设成tz指向的结构体数据。
2获取秒级别的时间
typedeflongtime_t;
time_ttime(time_tt);
如果t是non-null,它将会把时间值填入t中
3内核26版本后新增的clockapi接口
获取纳秒级别的时间
structtimespec{
time_ttv_sec;/秒s/
longtv_nsec;/纳秒ns/
};
intclock_getres(clockid_tclk_id,structtimespecres);
intclock_gettime(clockid_tclk_id,structtimespectp);
intclock_settime(clockid_tclk_id、conststructtimespectp);
编译连接时采用-lrt才能编译通过。
clk_id可选参数:
CLOCK_REALTIME
系统全局的实时时钟设置此时钟需要合适的权限
CLOCK_MONOTONIC
只能被读取,无法被设置,表示monotonic时间起点
CLOCK_PROCESS_CPUTIME_ID
从cpu每进程的高分辨率计时器
CLOCK_THREAD_CPUTIME_ID
线程的特定cpu时间时钟
系统启动时,会首先从rtc中读取rtc时间,并设置给xtime,而当ntp对系统时间进行更新时,首先设置xtime,然后调用hwclock设置到rtc硬件中。xtime根据需要的精度,可以通过上面几个接口来选择使用。
1uptime命令
输出: 16:11:06 up 4:19, 4 users, load average: 1344, 1348, 1393
2查看/proc/uptime文件计算系统启动时间
cat /proc/uptime
输出: 1560161 2783092
第一数字即是系统已运行的时间秒数,运用系统工具date即可算出系统启动时间
3查看/proc/uptime文件计算系统运行时间
cat /proc/uptime| awk -F '{run_days= 1 % 86400)/3600;run_minute=( 1 % 60;printf("系统已运行:%d天%d时%d分%d秒",run_days,run_hour,run_minute,run_second)}'
1、clock --show
Tue 29 Aug 2017 01:14:21 PM CST -0396903 seconds
2、date
date +%Y%m%d-%H:%M:%S%N
执行ntpdate xxxxxxxxxxxx(ntp服务器地址)。
Linux下配置NTP服务器
配置方法:
1、ntp服务安装
NTP服务在RHEL5x中式默认安装的软件包,可用rpm -qa |grep
ntp检查是否安装,如果未安装可使用如下命令安装与删除NTP服务器软件包
#使用rpm方式安装
rpm -ivh ntp-422p1-8el5i386rmp
#使用yum方式安装
yum -y install ntpi
#使用rpm方式删除
rpm -e ntp-422pl-8el5i386rpm
#使用yum方式删除
yum -y remove ntpi
2、ntp服务配置
在ntp服务安装完成后,需要修改ntp服务配置文件。ntp服务主配置文件/etc/ntpconf
21 ntp服务的启动、暂停
NTP属于system
V服务,其启动、暂停相关命令如下:
#启动
service ntpd
start
#停止
Service ntpd
stop
#重新加载
service ntpd
reload
#查看当前启动状态
service ntpd
status
22 ntp服务自动加载
设置ntp服务下一次开机运行状态可通过命令配置
#在运行级别2、3、4、5上设置为自动运行
chkconfig
ntpd on
#在运行级别2、3、4、5上设置为不自动运行
chkconfig
ntpd off
#在运行级别3、5上设置为自动运行
chkconfig
ntpd --level 35 on
#在运行级别3、5上设置为不自动运行
chkconfig
ntpd --level 35 off
23 配置信息
配置ntp,将Internet上的时间服务器作为内部标准时间来源,过程如下
1)修改/etc/ntpconf文件
restrict default kod nomodify notrap nopeer noquery
restrict 127001
restrict -6::1
restrict 19216800 mask 2552552550 nomodify notrap
restrict 19216810 mask 2552552550 nomodify notrap
#指定Internet上的时间服务器
restrict 20746232182 mask 255255255255 nomodify notrap noquery
server 20746232182
server 12712710
fudge 12712710 stratum 10
keys /etc/ntp/keys
#指定NTP服务器日志文件
logfile /var/log/ntp
2)修改/etc/ntp/stpe-tickers文件,内容如下(当ntpd服务启动时,会自动与该文件中记录的上层NTP服务进行时间校对)
20746232182
12712710
3)修改/etc/sysconfig/ntpd文件,内容如下:
#允许BIOS与系统时间同步,也可以通过hwclock -w 命令
SYNC_HWCLOCK=yes
4)在配置完成并重新启动服务后,可通过ntpstat
命令显示本机上一次与上层ntp服务器同步时间的情况,也可以使用ntpq -p 查看本机与上层ntp服务器通信情况,
24 图形界面配置NTP
图形界面下直接用system-config-date, 在“Network Time Protocol”选项页指定NTP服务器后勾选“Synchronize system clock before startingservice”,将ntpd服务设置为自动运行即可。
25 客户端访问
1)Linux客户端可通过图形界面进行配置,也可以通过ntpdate命令立即与NTP服务器及行时间校对。
ntpdate 192168010
2)Windows客户端,只需双击任务栏右下角的时钟,选择“Internet时间”选项页,输入NTP服务IP地址或FQDN,并勾选“自动与Internet时间服务器同步”即可。
Windows默认7天自动更新一次,可通过修改注册表HKEY_LOCAL_MACHINE\SYSTEM
\CurrentControlSet\services\W32Time\TimeProviders\NtpClient\SpecialPollInterval 默认单位为妙,修改后重新启动即可生效。
1、datesh代码
#!/bin/sh
beg_date=`date -d "$1" +%s`
end_date=`date -d "$2" +%s`
if [[ -z $1 ]]||[[ -z $2 ]];then
echo "Usage: $0 YYYYMMDD YYYYMMDD"
exit 0;
fi
if [[ ${beg_date} > ${end_date} ]];then
echo "The end_date < beg_date ;Please input the right date,example: $0 20140101 20140301"
exit 0;
fi
for (( i=${beg_date};i<=${end_date};i=i+86400))
do
date -d @${i} +%Y%m%d
done
2、实例/datesh 20140101 20140201
date命令的功能是显示和设置系统日期和时间。 该命令的一般格式为: date [选项] 显示时间格式(以+开头,后面接格式) date 设置时间格式 命令中各选项的含义分别为: -d datestr, --date datestr 显示由datestr描述的日期 -s datestr, --set datestr 设置datestr 描述的日期 -u, --universal 显示或设置通用时间 时间域 % H 小时(00 ~ ]# date -d next-day +%Y%m%d20060328[root@linuxso ~ ]# date -d yesterday +%Y%m%d20060326[root@linuxso ~ ]# date -d last-month +%Y%m200602[root@linuxso ~ ]# date -d next-year +%Y2007------------------------------------------而FreeBSD则不同;举例如下:For FreeBSD[root@linuxso ~]# date -v -1m +%Y%m%d 20060227[root@linuxso ~]# date +%Y%m%d20100107上面是今天的日期20100107[root@linuxso ~]# date -d "4 days ago" +%Y%m%d 20100103上面是四天前的日期 [root@linuxso ~]# date -d "-2 days ago" +%Y%m%d 20100109上面是两天后的日期[root@linuxso ~]# date -d "1 year ago" +%Y%m%d 20090107上面是一年前的日期
需要借助其他函数。linux函数只能得到秒精度的时间,为了获得更高精度的时间戳,需要其他函数。函数,数学术语。其定义通常分为传统定义和近代定义,函数的两个定义本质是相同的,只是叙述概念的出发点不同,传统定义是从运动变化的观点出发,而近代定义是从集合、映射的观点出发。
以上就是关于linux实时时间 xtime怎么获取并使用全部的内容,包括:linux实时时间 xtime怎么获取并使用、Linux获取系统启动运行了多长时间、如何获取linux毫秒级的当前时间等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)