三.linux应用&网络编程之获取系统信息

有道云笔记:https://note.youdao.com/ynoteshare1/index.html?id=a71be28974000520f480b5369a5236c3&type=note#/

目录

 

一、时间的概念

1.1、 GMT与UTC时间的区别

1.2、计算机中与时间有关的部件

二、linux系统中的时间

2.1、话说jiffies

2.2、linux系统如何记录时间

2.3、linux中时间相关的系统调用

常用的时间函数

2.4常用时间API函数功能测试

time函数

ctime/asctime/gmtime/localtime/mktime 函数

strftime函数 ()

gettimeofday和settimeofday函数

2.4总时间API程序

三、linux中的随机数

获取伪随机数的函数:

linux中随机数相关API

真正的随机数

四、proc文件系统

1、操作系统级别的调试:

单步调试

复杂程序printf打印信息调试

框架体系日志记录调试

操作系统内核调试

2.proc应运而生

proc文件系统的思路是:

proc文件系统给了开发者一种调试内核的方法:

proc文件系统是一个接口

常用proc中的文件介绍

proc文件系统的使用方法

扩展:sys文件系统


一、时间的概念

1.1、 GMT与UTC时间的区别

GMT时间是格林尼治时间,世界统一,但是现在基本不用 

UTC时间,原子钟时间,非常精确,现在一般用这个 

 

1.2、计算机中与时间有关的部件

(1)点时间和段时间。段时间=点时间-点时间

(2)定时器和实时时钟。定时器(timer)定的时间就是段时间,

实时时钟(RTC)就是和点时间有关的一个器件。

 

二、linux系统中的时间

2.1、话说jiffies

  • 全局变量jiffies用来记录自系统启动以来产生的节拍的总数。
  • 启动时,内核将该变量初始化为0,此后,每次时钟中断处理程序都会增加该变量的值。
  • 一秒内时钟中断的次数等于Hz,所以jiffies一秒内增加的值也就是Hz。系统运行时间以秒为单位,等于jiffies/Hz。
  • jiffies过1s则+1。记录的是1970年1月1日00:00距离现在的秒数,是一个段时间。(不是点时间)

 

2.2、linux系统如何记录时间

  • 操作系统只在开机时读一次RTC,整个系统运行过程中RTC是无作用的。RTC的真正作用其实是在OS的2次开机之间进行时间的保存。
  • 内核在开机启动的时候会读取RTC硬件获取一个时间作为初始基准时间,这个基准时间对应一个jiffies值。
  • (这个基准时间换算成jiffies值的方法是:用这个时间减去1970-01-01 00:00:00 +0000(UTC),然后把这个时间段换算成jiffies数值),这个jiffies值作为我们开机时的基准jiffies值存在。
  • 然后系统运行时每个时钟节拍的末尾都会给jiffies这个全局变量加1,因此操作系统就使用jiffies这个全局变量记录了下来当前的时间。
  • 当我们需要当前时间点时,就用jiffies这个时间点去计算(计算方法就是先把这个jiffies值对应的时间段算出来,然后加上1970-01-01 00:00:00 +0000(UTC)即可得到这个时间点)

 

2.3、linux中时间相关的系统调用

  • 常用的时间函数

time_t time(time_t *t); man 2

#include <time.h> man 3

 

       char *asctime(const struct tm *tm);

       char *asctime_r(const struct tm *tm, char *buf);

 

       char *ctime(const time_t *timep);

       char *ctime_r(const time_t *timep, char *buf);

 

       struct tm *gmtime(const time_t *timep);

       struct tm *gmtime_r(const time_t *timep, struct tm *result);

 

       struct tm *localtime(const time_t *timep);

       struct tm *localtime_r(const time_t *timep, struct tm *result);

 

       time_t mktime(struct tm *tm);

size_t strftime(char *s, size_t max, const char *format, const struct tm *tm);

  #include <sys/time.h> man 3

 

       int gettimeofday(struct timeval *tv, struct timezone *tz);

 

       int settimeofday(const struct timeval *tv, const struct timezone *tz);

  • 常用时间格式之间的转换

 

 

2.4常用时间API函数功能测试

(相关API,自己man,有的传参是地址,有的是buf,有的是time_t,具体看api定义 )

  • time函数

返回值:为1970-01-01 00:00:00 +0000 (UTC).  到今天的秒数

int main(void)

{

time_t tNOW=-1;

tNOW= time(NULL);//返回值的方式

//time(&tNOW);//指针做输出型参数的方式

if(tNOW<0)

{

perror("time");

return -1;



}

printf("time:%ld\n\n",tNOW);



return 0;

}

 

  • ctime/asctime/gmtime/localtime/mktime 函数

E:\Linux\3.AppNet\3.osinfo\3.1

int main(void)

{

time_t tNOW=-1;

struct tm tmNow;

tNOW= time(NULL);//返回值的方式

//time(&tNOW);//指针做输出型参数的方式

if(tNOW<0)

{

perror("time");

return -1;



}

/1./time函数测试

printf("1.time函数测试\n");

printf("time:%ld\n\n",tNOW);

//2.ctime函数测试:ctime可以从time_t出发得到一个字符串格式的当前时间。

printf("2.ctime函数测试\n");

printf("ctime:%s\n",ctime(&tNOW));

/*3.gtime函数测试:获取的时间中:年份是以1970为基准的差值,月份是0表示1月,小时数是以UTC时间的0时区为
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值