3.2 获取系统信息
3.2.1 关于时间的概念
3.2.1.1 GMT 格林泥质时间 作为全球国际时间,用以描述全球性的时间,方便大家记忆。
3.2.2 UTC时间
3.2.2 linux系统中的时间
1、jiffies的引入
jiffies是linux内核中的一个全局变量,这个变量用来记录以jiffies 为单位
长度的一个 数值。
内核配置的时候定义了一个节拍时间,实际上linux内核系统的调度系统工作时是以这个节拍为时间片的。
2、linux系统如何记录时间
内核在开机时会读取RTC获取一个基准时间,,用这个时间对应一个jiffies值,
其实开机时操作系统只在开机时读取一次RTC,整个系统。
3、常用时间相关的API
time系统调用返回当前时间以秒为单位的距离 1970-01-01 00
#include <time.h>
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);
gmtime 得到的是国际时间
locatime 得到的是本地时间
3.3.3 时间相关的API实战1
time
#include <time.h>
time_t time(time_t *t);
ctime 格式固化的,没法调整
ctime_r
3.2.4 时间相关的API实战2
mktime mktime用来向操作系统设置时间使用的
asctime
strftime
3.2.5 linux中使用随机数
1、随机数和伪随机数
随机数是随机出现,没有任何规律的一组数列
真正完全随机的数列是不存在的,只是一种理想情况。我们平时要用到
随机数时,一般通过算法得到伪随机数。
平时说到的随机数,基本都是伪随机数。
2、linux中随机相关API
连续多次调用rand函数可以返回一个伪随机序列
srand函数用来设置rand获取的伪随机序列的种子
每次执行时,设置不同的种子,得到不同的伪随机序列。
一般常规做法:用time函数的返回值来做srand的参数。
3、实战演示
4、总结和说明
5、在linux系统中 获取真正的随机数。
1、linux系统收集系统中随机发生事件的时间(譬如鼠标,触摸屏操作和坐标等),作为随机种子去生成随机数序列。
3.3.6 proc文件系统介绍
1、操作系统级别的调试
2、简单程序单部调试
3、框架体系日记记录信息调试
4、内核调试的困境
proc虚拟文件系统的工作原理
项kernel这样庞大的项目,给里面添加/更改一个工能是非常麻烦的,因为你这添加的一个功能可能会影响其他已经有的。
为了降低内核调试和学习难度,
proc 文件 系统的思路是:在内核中 构建一个虚拟的文件系统proc,内核运行时将内核中关键的数据以文件的方式呈现在/proc目录中的一些特定文件中。这将相当于不可见的内核中的数据结构以一种可视化的方式呈现给内核开发者。
cmdline
cpuline
devices
interrupts
3.3.7 proc文件系统的使用
1、kesg 内核打印信息 version 版本信息
cat以手工查看
2、在程序中可以文件IO访问
3、在shell程序中用cat命令结合正则表达式来获取并处理内核信息
4、扩展:sys文件系统
可视化数据接口
可读可写
proc和sys功能是一样的,这是历史原因造成的,