linux实时时间 xtime怎么获取并使用

linux实时时间 xtime怎么获取并使用,第1张

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毫秒级的当前时间等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/9485160.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存