博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
每日一练(十九)
阅读量:3952 次
发布时间:2019-05-24

本文共 1652 字,大约阅读时间需要 5 分钟。

文章目录

11.26 rand产生随机数

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

int rand(void);

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

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

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

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

void srand(unsigned int seed);

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

在这里插入图片描述

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

参考:

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

11.27 time() 函数

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

#include 
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。

转载地址:http://otwzi.baihongyu.com/

你可能感兴趣的文章
SSM框架和SSH框架的区别
查看>>
Elasticsearch-基础介绍及索引原理分析
查看>>
过滤敏感词算法
查看>>
linux学习之shell脚本if判断参数-n,-d,-f等
查看>>
linux学习之windos文件在linux里面乱码解决
查看>>
idea快捷键
查看>>
linux学习之shell遍历数组
查看>>
python函数取参及默认参数使用
查看>>
linux学习之shell中的${},##, %% , :- ,:+, ? 的使用
查看>>
Spring学习之Filter、Interceptor、Aop实现与区别
查看>>
Spring 添加@Autowired注释, 注入对象却为空
查看>>
springSecurity学习
查看>>
通过Java的api操作redis
查看>>
jquery基本选择器
查看>>
linux学习之shell字符串大小写转换
查看>>
Linux下用base64对字符串进行加密解密
查看>>
H5走迷宫小游戏
查看>>
mysql建表 表名与关键字冲突
查看>>
mysql 创建单表外键关联多表
查看>>
postman使用
查看>>