每日一练(十九)

11.26 rand产生随机数

rand函数可以产生一个随机数,rand() 头文件为<stdlib.h>,其函数原型为:

int rand(void);

rand() 会返回一个0~RAND_MAX 之间的整数,但是一段程序运行多次,rand返回的值始终是一样的。这是因为rand返回的随机值是一个伪随机值,就是说看起来返回的值是一个随机值,实际上这个返回值是由公式推导出来的,推导随机数的公式依赖于一个数,这个数就叫做种子。种子和返回的随机数之间的关系是一种正态分布关系。

而且种子在系统启动的时候就是一个确定的值,所以每次程序运行的随机值都是根据这个种子来算的,要想在程序运行期间改变随机值,就要从根源入手,即改变种子的值。

也就是说!!!种子一定,产生的随机数就是一定的!要改变随机数,就要改变种子!!!

通过 srand() 函数来改变种子的值,也叫播种,其函数原型如下:

void srand(unsigned int seed);

我们可以通过改变种子的值来改变随机值。

在这里插入图片描述

可以看出,虽然产生了随机数,但是每次持续运行产生的随机数都是一样的,这是因为每次srand的值都是一样的,虽然改变了,但是相对每次运行,种子还没变。

参考:C语言随机数生成教程,C语言rand和srand用法详解 (biancheng.net)

下面会介绍解决这种问题的方法!

11.27 time() 函数

利用time() 函数可以得到当前的时间,时间是精确到秒的,利用这个动态变化的时间,可以来动态改变srand中的种子的值,达到了产生真正的随机值的作用。其函数原型如下:

#include <time.h>
time_t time (time_t *timer);

经常配合srand使用如下:

srand((unsigned)time(NULL));

因为time(NULL)是以毫秒为单位的,所以一般还是可以产生随机数的。

11.28 宏定义中 ###

在C语言宏定义中,经常用到###

其中#的作用是把一个宏参数变为字符串

##的作用是把两个宏参数连接在一起

如下:
在这里插入图片描述

11.29 什么是VFS

Linux中一切皆文件,所以文件系统至关重要,文件系统分为三部分,第一部分是VFS,后面两部分就是Cache和真正的文件系统。

Linux的文件系统框架如图:

在这里插入图片描述

  • VFS是Linux内核中的一个软件抽象层,向上给用户提供文件系统的接口(通过系统调用),向下实现不同文件系统在Linux中共存。
  • VFS对用户提供标准的文件系统调用接口,对具体的文件系统,通过调用通用的函数指针来调用对应的文件系统函数完成相应操作。
  • 如何使用文件系统的程序必须通过VFS的接口来访问。
  • VFS是内核的一部分

11.30 文件IO与标准IO区别

  • 文件IO,又称为低级磁盘IO,遵守POSIX标准,是不带缓冲的IO,文件IO是直接通过系统调用来操作文件的;标准IO,也称为高级磁盘IO,遵守ANSI C相关标准,是带缓冲的IO,标准IO是调用标准C库来实现对文件的操作的。
  • 文件IO读写文件的时候,每次都会执行相关的系统调用,但是频繁使用系统调用会增加系统的开销;标准IO可以看作在系统调用的基础上增加了一个缓冲机制,先读写缓冲区,等到必要的时候再通过系统调用实现缓冲区的写入与读取。
  • 文件IO使用文件描述符来表示一个文件,可以通过文件描述符来访问不同类型的文件;标准IO中使用**FILE(流)**来表示一个文件,通常只用来访问普通文件。
  • 基于文件描述符的文件IO虽然不能直接移植到Linux以外的OS中,但是文件IO往往是实现底层IO操作的唯一途径,所以基于文件描述符的文件IO是Linux中最常用的操作之一;标准IO是,只要OS中安装了C库,就可以调用标准IO,标准具有更好的可移植性。
  • Linux中的C库一般是 glibc ,是标准C库的超集,不仅仅包含ANSI C 定义的函数,还包含了POSIX 标准中定义的函数,这意味着Linux下有了 glibc 既可以使用标准IO,也可以使用文件IO。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值