专栏首页电子技术研习社Linux笔记(7)| 获取系统信息

Linux笔记(7)| 获取系统信息

今天分享的是Linux中获取系统信息。主要介绍获取时间信息以及产生随机数。

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

1、time函数

函数原型:

time_t time(time_t *tloc);

time能得到一个当前时间距离标准起点时间1970-01-0100:00:00 +0000(UTC)过去了多少秒。

2、ctime和ctime_r函数

函数原型:

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

(1)ctime可以从time_t出发得到一个容易观察的字符串格式的当前时间。

(2)ctime好处是很简单好用,可以直接得到当前时间的字符串格式,直接打印来看。坏处是ctime的打印时间格式是固定的,没法按照我们的想法去变。

(3)实验结果可以看出ctime函数得到的时间是考虑了计算机中的本地时间的(计算机中的时区设置)

注意这两个函数的区别:实际上,这两个函数几乎没有区别,主要的不同是第一个函数不需要自己定义一段内存空间,而第二个函数需要自己定义一段内存空间作为输出型参数,我们可以定义一个char类型的数组,如果第二个参数直接传入一个char类型的指针,虽然编译没问题,但是运行会发生段错误,这是因为越界了。

3、gmtime和gmtime_r函数

函数原型:

struct tm *gmtime(consttime_t *timep);
struct tm *gmtime_r(consttime_t *timep, struct tm *result);

这个函数得到的信息主要是在结构体中

struct tm {
               int tm_sec;    /* Seconds (0-60) */
               int tm_min;    /* Minutes (0-59) */
               int tm_hour;   /* Hours (0-23) */
               int tm_mday;   /* Day of the month (1-31) */
               int tm_mon;    /* Month (0-11) */
               int tm_year;   /* Year - 1900 */
               int tm_wday;   /* Day of the week (0-6, Sunday = 0) */
               int tm_yday;   /* Day in the year (0-365, 1 Jan = 0) */
               int tm_isdst;  /* Daylight saving time */
           };

这两个函数的作用也是一样的,区别就在于输入参数,第二个函数的第二个输入参数是一个结构体类型的指针,同样的也是输入型参数,所以我们应该先定义一个结构体变量,然后将它的地址传进去。返回值是一个结构体指针,就是指向我们定义的那个结构体变量,因此,它的结果我们既可以用结构体变量访问,也可以用结构体指针访问。

4、localtime和localtime_r函数

函数原型:

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

实际上,这两个函数和上面的没什么很大的区别,主要区别在于这个函数在计算时间的时候,加上了本地的时区,比如在上面的函数中获取的小时数是0时区的,而我们用localtime函数获取的是东8区的(北京时间)。

当然,这个和你的系统有关,首先得保证你的系统时间是没有问题的。

此外,还有mktime和asctime函数,其实功能都差不多,这里不再多说。

5、strftime函数

函数原型:

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

(1)asctime和ctime得到的时间字符串都是固定格式的,没法用户自定义格式

(2)如果需要用户自定义时间的格式,则需要用strftime。

这个函数的第一个参数是返回的字符串,第二个参数是用户想要的格式,它提供了很多格式可以自由选择,比如想要打印出年份,就可以写%Y,具体的可以查看手册。注意要写成字符串的格式。第三个参数就还是那个结构体变量的地址。

6、gettimeofday和settimeofday

(1)前面讲到的基于time函数的那个系列都是以秒为单位来获取时间的,没有比秒更精确的时间。

(2)有时候我们程序希望得到非常精确的时间(譬如以us为单位),这时候就只能通过gettimeofday来实现了。

二、linux中使用随机数

随机数和伪随机数:

(1)随机数是随机出现,没有任何规律的一组数列。

(2)真正的完全随机的数列是不存在的,只是一种理想情况。我们平时要用到随机数时一般只能通过一些算法得到一个伪随机数序列。

(3)我们平时说到随机数,基本都指的是伪随机数。

1、rand函数和srand函数

int rand(void);
int rand_r(unsigned int *seedp);
void srand(unsigned int seed);

连续多次调用rand函数可以返回一个伪随机数序列,srand函数用来设置rand获取的伪随机序列的种子

(1)单纯使用rand重复调用n次,就会得到一个0-RAND_MAX之间的伪随机数,如果需要调整范围,可以得到随机数序列后再进行计算。

(2)单纯使用rand来得到伪随机数序列有缺陷,每次执行程序得到的伪随机序列是同一个序列,没法得到其他序列

(3)原因是因为rand内部的算法其实是通过一个种子(seed,其实就是一个原始参数,int类型),rand内部默认是使用1作为seed的,种子一定的算法也是一定的,那么每次得到的伪随机序列肯定是同一个。

(4)所以要想每次执行这个程序获取的伪随机序列不同,则每次都要给不同的种子。用srand函数来设置种子。

总结和说明:(1)在每次执行程序时,先用srand设置一个不同的种子,然后再多次调用rand获取一个伪随机序列,这样就可以每次都得到一个不同的伪随机序列。

(2)一般常规做法是用time函数的返回值来做srand的参数。

本文分享自微信公众号 - 电子技术研习社(zjf18770701843),作者:小小飞飞哥

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-06-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Linux笔记(4)| 文件IO操作

    今天主要分享的是Linux中的文件IO,所谓IO,也就是输入输出,也就是文件的读和写。主要涉及到文件的打开,读写和关闭。

    飞哥
  • stm32时钟配置简介

    时钟是单片机非常重要的一部分,它为单片机的系统或是外设提供了时序。这里主要来讲解一下stm32的时钟配置。

    飞哥
  • 教你如何用蜂鸣器演奏乐谱

    首先是对蜂鸣器的介绍。蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电...

    飞哥
  • python的集合与函数

    函数能提高应用的模块性,和代码的重复利用率。Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。

    py3study
  • MySQL进阶篇(03):合理的使用索引结构和查询

    在MySQL使用的过程中,所谓的性能问题,在大部分的场景下都是指查询的性能,导致查询缓慢的根本原因是数据量的不断变大,解决查询性能的最常见手段是:针对查询的业务...

    知了一笑
  • Python 基础 函数

    python 什么是函数   Python不但能非常灵活地定义函数,而且本身内置了很多有用的函数,可以直接调用。 python 函数的调用   Python内置...

    用户1197315
  • 必要商城MySQL开发规范

    索引是一把双刃剑,它可以提高查询效率但也会降低插入和更新的速度并占用磁盘空间

    用户7657330
  • MySQL开发规范

    索引是一把双刃剑,它可以提高查询效率但也会降低插入和更新的速度并占用磁盘空间

    用户7657330
  • 数据仓库中如何使用索引

    数据仓库的索引是个棘手的问题。如果索引太多,数据插入很快但是查询响应就会很慢。如果太多索引,数据导入就很慢并且数据存储空间更大,但是查询响应更快。数据库中索引的...

    用户1217611
  • 十四.Linux域名服务DNS

    DNS 全称是 Domain Name System,大意是域名解析系统,它的职责是把域名翻译成一个一个可以识别的 IP 供不同的计算机设备连接。

    对弈

扫码关注云+社区

领取腾讯云代金券