srand 和rand函数原型?

xiabeizi 2008-09-08 09:39:43
大家好,我知道C语言中srand和rand这两个函数是用来生成随机数的。我也知道怎么用!

可是它们两个的函数原型是什么呢?也就是说它们是具体如何实现的呢?
我在Linux内核中没有找到。
...全文
438 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhongsishun 2008-09-09
  • 打赏
  • 举报
回复
不懂,看看
xiabeizi 2008-09-09
  • 打赏
  • 举报
回复
呵,谢谢楼上的各位指点,明白了,发现实现起来确实也不难啊!
给分了!
puzzlesky 2008-09-09
  • 打赏
  • 举报
回复
不懂,看看
malu_1982 2008-09-08
  • 打赏
  • 举报
回复
可以模拟srand的用法

用系统时间做种子生成
帅得不敢出门 2008-09-08
  • 打赏
  • 举报
回复
为何要自己实现, 标准库里有的一般是没有必要自己再写的.
种子 参数unsigned int seed 可以不用time
xiabeizi 2008-09-08
  • 打赏
  • 举报
回复
谢谢楼上朋友们的回答,
可是看来要是直接拿到外面来用的话可能还不行,
那么如果自己写一个能够产生随机数的函数应该如何写呢?
即实现一个自己的MySrand(unsigned int a)和Myrand()

有没有可能不用time.h中的time作种子呢?
Arthur_ 2008-09-08
  • 打赏
  • 举报
回复
这个你还是看下 openssl 的rand吧。

基本上是用sha1做的
K行天下 2008-09-08
  • 打赏
  • 举报
回复
int rand ( void );



void srand ( unsigned int seed );
星羽 2008-09-08
  • 打赏
  • 举报
回复

vc2005里的


/***
*void srand(seed) - seed the random number generator
*
*Purpose:
* Seeds the random number generator with the int given. Adapted from the
* BASIC random number generator.
*
*Entry:
* unsigned seed - seed to seed rand # generator with
*
*Exit:
* None.
*
*Exceptions:
*
*******************************************************************************/

void __cdecl srand (
unsigned int seed
)
{

_getptd()->_holdrand = (unsigned long)seed;

}


/***
*int rand() - returns a random number
*
*Purpose:
* returns a pseudo-random number 0 through 32767.
*
*Entry:
* None.
*
*Exit:
* Returns a pseudo-random number 0 through 32767.
*
*Exceptions:
*
*******************************************************************************/

int __cdecl rand (
void
)
{

_ptiddata ptd = _getptd();

return( ((ptd->_holdrand = ptd->_holdrand * 214013L
+ 2531011L) >> 16) & 0x7fff );

}


LoadRunner性能测试工具实战视频教程【全套26集】 随机函数 在软件测试工具中如何巧用LoadRunner的随机函数。 LoadRunner有自带的随机函数,如果巧妙的加以采用,能解决一些看似很困难的实际问题。 一个项目的性能测试。与数据库直连,根据外部传入的SQL ID和SQL参数,从指定数据库中读取SQL模版,拼装成真实的SQL语句、执行,并将得到的结果放入缓存中。目的是减少数据库的压力。 该系统将支撑大量的SQL操作,性能自然成为备受关注的焦点之一。 由于它跟SQL语句相关,在真实环境下,同一时间可能执行着不同类型的SQL,即便是同一类型,其参数也各式各样。那么,怎样才能模拟出最符合实际情况的性能测试场景呢? 首先设计场景,即,在LoadRunner中按照比例随机取到某一类型的SQL,再随机传入参数给它,让最终的每条SQL都是随机生成,各不相同。 从场景中,可以看到,此处涉及双重随机。只采用loadruner的参数设置是无法实现的。此时需要想办法先按设定好的比例随机取到SQL,然后在每条SQL上随机取参数列表中的参数。 于是想到了loadrunner的随机函数。先实现随机取SQL ID,之后再在特定的SQL中随机取参数列表中的参数。 LoadRunner中,随机函数rand(),它用来产生0到rand_max之间的随机整数。函数原型是 int rand (void); 然而调用rand之前,必须给随机数产生一个随机种子。这个种子由srand()函数产生。其原型是 int srand (seedTime); 2 分析占用率 1. 平均事务响应时间 Average Transaction Response Time 优秀:10s 2. 每秒点击率 Hits per Second LoadRunner分析页面 LoadRunner分析页面 当增大系统的压力(或增加并发用户数)时,吞吐率和TPS的变化曲线呈大体一致,则系统基本稳定。若压力增大时,吞吐率的曲线增加到一定程度后出现变化缓慢,甚至平坦,很可能是网络出现带宽瓶颈,同理若点击率/TPS曲线出现变化缓慢或者平坦,很可能是服务器响应时间增加,观察服务器资源使用情况,确定是否是服务器问题。 3. 请求响应时间 Time to Last Byte 4. 每秒系统处理事务数 Transaction per second 5. 吞吐量 Throughout 6. CPU利用率 Processor / %Processor Time 好:70% 坏:85% 很差:90%+ 7. 数据库操作消耗的CPU时间 Processor / %User Time 如果该值较大,可以考虑是否能通过友好算法等方法降低这个值。如果该服务器是数据库服务器, Processor\%User Time 值大的原因很可能是数据库的排序或是函数操作消耗了过多的CPU时间,此时可以考虑对数据库系统进行优化。 8. 核心态CPU平均利用率 Processor /%Privileged Time 如果该参数值和"Physical Disk"参数值一直很高,表明I/O有问题。可考虑更换更快的硬盘系统 9. 处理队列中的线程数 Processor / Processor Queue Length 如果该值保持不变(>=2)个并且%Processor Time 超过90%,那么可能存在处理器瓶颈。如果发现超过2,而处理器的利用率却一直很低,那么或许更应该去解决处理器阻塞问题,这里处理器一般不是瓶颈。 10. 文件系统缓存 Memory / Cache Bytes 50%的可用物理内存 11. 剩余的可用内存 Memory / Avaiable Mbytes 至少要有10% 的物理内存值 12. 每秒下载页数 Memory / pages/sec 好:无页交换 坏:CPU每秒10个页交换 很差:更多的页交换 13. 页面读取操作速率 Memory / page read/sec 如果页面读取操作速率很低,同时 % Disk Time 和 Avg.Disk Queue Length的值很高,则可能有磁盘瓶径。但是,如果队列长度增加的同时页面读取速率并未降低,则内存不足。 14. 物理磁盘利用率 Physical Disk / %Disk Time 好:<30% 坏:<40% 很差:<50%+ 15. 物理磁盘平均磁盘I/O队列长度 Physical Disk / Avg.Disk Queue Length 该值应不超过磁盘数的1.5~2 倍。要提高性能,可增加磁盘 16. 网络吞吐量 Network Interface / Byt
原书名: Perl by Example(Third Edition),原出版社: PH PTR,作者: Ellie Quigley,译者: 杜炜,出版社:清华大学出版社,出版日期:2002 年8月,PDF 格式,大小 19 Mb。 内容简介 本书以最新版本的Perl 5.6.1为范本,全面介绍了Perl语言,其内容包含Perl的所有主题。对每个主题都使用了范例说明,从Perl变量、正则表达式,到编写报表、CGI脚本和网络应用,并对范例程序进行了解释。读者可以很容易地通过这些范例掌握Perl语言的语法。附录含有完整的函数和定义、命令行开关、特殊变量、常见模块和Perl调试器的列表,全功能的、面向对象的CGI程序,一些有用的脚本,以及很有帮助的HTM教程。 本书非常适合于Perl语言初学者阅读,对于Perl程序员,也有很大的参考价值。 目录 第1章 实用摘要和报表语言 1.1 什么是Perl 1.2 Perl用户 1.3 Perl的版本 1.4 如何获得Perl 1.5 什么是CPAN 1.6 Perl文档 第2章 Perl脚本 2.1 从命令行使用Perl 2.1.1 七开关 2.1.2 -n开关 2.1.3 -c开关 2.2 脚本设置 2.3 脚本 2.3.1 开始 2.3.2 注释 2.3.3 Perl语句 2.3.4 执行脚本 2.3.5 脚本范例(UNIX, Windows) 练习1 了解Perl的语法 .第3章 获得打印句柄 3.1 文件句柄 3.2 字 3.2.1 引号 3.2.2 实量(常量) 3.3 print函数 3.3.1 打印实量 3.3.2 警告编译指示和-w开关 3.3.3 strict编译指示和字 3.4 printf函数 3.4.1 sprintf函数 3.4.2 无引号打印:here document 练习2 编写literals脚本 第4章 变量 4.1 关于Perl变量 4.1.1 类型 4.1.2 作用域和包 4.1.3 命名规范 4.1.4 赋值语句 4.1.5 引号规则 4.2 标量、数组和散列 4.2.1 标量变量 4.2.2 数组 4.2.3 散列 4.3 从STDIN读取 4.3.1 把输入赋值给标量变量 4.3.2 chop和chomp函数 4.3.3 read函数 4.3.4 getc函数 4.3.5 将输入赋值给数组 4.3.6 将输入赋值给散列 4.4 数组函数 4.4.1 chop和chomp函数(用于列表) 4.4.2 exists函数 4.4.3 delete函数 4.4.4 grep函数 4.4.5 join函数 4.4.6 map函数 4.4.7 pack和unpack函数 4.4.8 pop函数 4.4.9 push函数 4.4.10 shift函数 4.4.11 splice函数 4.4.12 split函数 4. 4.13 sort函数 4.4.14 reverse函数 4.4.15 unshift函数 4.5 散列(关联数组)函数 4.5.1 keys函数 4.5.2 values函数 4.5.3 each函数 4.5.4 delete函数 4.5.5 exists函数 4.6 关于散列的更多内容 4.6.1 从文件加载散列 4.6.2 特殊散列 4.6.3 语境 练习3 特殊字符 第5章 运算符 5.1 关于Perl运算符 5.2 混合数据类型 5.3 优先权与结合性 5.3.1 赋值运算符 5.3.2 关系运算符 5.3.3 等值运算符 5.3.4 逻辑运算符(短路运算符) 5.3.5 逻辑字运算符 5.3.6 算术运算符 5.3.7 自动递增和自动递减运算符 5.3.8 位逻辑运算符 5.3.9 条件运算符 5.3.10 范围运算符 5.3.11 特殊字符串运算符和函数 5.3.12 生成随机数 5.3.13 rand/srand函数 练习4 运算符 第6章 条件 6.1 控制结构,块和复合语句 6.2 决策--条件结构 6.2.1 if和unless语句 6.2.2 unless语句结构 6.3 循环 6.3.1 while循环 6.3.2 until循环 6.3.3 for循环 4.5.2 values函数 4.5.3 each函数 4.5.4 delete函数 4.5.5 exists函数 4.6 关于散列的更多内容 4.6.1 从文件加载散列 4.6.2 特殊散列 4.6.3 语境 练习3 特殊字符 第5章 运算符 5.1 关于Perl运算符 5.2 混合数据类型 5.3 优先权与结合性 5.3.1 赋值运算符 5.3.2 关系运算符 5.3.3 等值运算符 5.3.4 逻辑运算符(短路运算符) 5.3.5 逻辑字运算符 5.3.6 算术运算符 5.3.7 自动递增和自动递减运算符 5.3.8 位逻辑运算符 5.3.9 条件运算符 5.3.10 范围运算符 5.3.11 特殊字符串运算符和函数 5.3.12 生成随机数 5.3.13 rand/srand函数 练习4 运算符 第6章 条件 6.1 控制结构,块和复合语句 6.2 决策--条件结构 6.2.1 if和unless语句 6.2.2 unless语句结构 6.3 循环 6.3.1 while循环 6.3.2 until循环 6.3.3 for循环 6.3.4 foreach循环 6.3.5 循环控制 6.3.6 伪开关语句 练习5 条件是什么 第7章 正则表达式--模式匹配 7.1 什么是正则表达式 7.2 表达式修饰符和简语句 7.2.1 条件修饰符 7.2.2 DATA文件句柄 7.2.3 循环修饰符 7.3 正则表达式运算符 7.3.1 m运算符和匹配 7.3.2 s运算符和替换 7.3.3 模式绑定运算符 练习6 它是sed、awk或grep吗?尝试Perl 第8章 获得控制:正则表达式元字符 8.1 正则表达式元字符 8.1.1 用于单字符的元字符 8.1.2 白空元字符 8.1.3 重复模式匹配的元字符 8.1.4 tr或y函数 8.2 统一字符编码(Unicode) 练习7 是sed、awk或grep吗?给出Perl的另外一个作用 第9章 获得文件句柄 9.1 用户定义文件句柄 9.1.1 打开文件:open函数 9.1.2 打开文件读 9.1.3 打开文件写 9.1.4 Win32文件 9.1.5 打开文件添加 9.1.6 select函数 9.1.7 使用flock锁住文件 9.1.8 seek和tell函数 9.1.9 打开文件读写 9.1.10 管道打开 9.2 传送参数 9.2.1 ARGV数组 9.2.2 ARGV和Null文件句柄 9.2.3 eof函数 9.2.4 -i开关:原位编辑文件 9.3 文件测试 练习8 获得文件句柄 第10章 子程序和函数 10.1 子程序/函数 10.1.1 定义和调用于程序 10.1.2 传送参数 10.1.3 原型 10.1.4 返回值 10.1.5 通过引用调用--别名和Typeglobs 10.1.6 通过指针传送 10.1.7 自动加载 10.1.8 BEGIN和END子程序(开始和结束) 10.1.9 subs函数 练习9 子程序不可缺少 第11章 模块化、打包并发送到库 11.1 包和模块 11.1.1 类比 11.1.2 定义 11.1.3 符号表 11.2 标准Perl库 11.2.1 @INC数组 11.2.2 包和.p1文件 11.2.3 模块和.pm文件 11.2.4 来自CPAN的模块 练习10 将所有的Perl都放入包中 练习11 压缩并放入库中 第12章 这个工作要求引用吗 12.1 什么是引用 12.1.1 符号引用与硬引用 12.1.2 硬引用 12.1.3 引用和匿名变量 12.1.4 嵌套数据结构 12.1.5 引用和子程序 12.1.6 文件句柄引用 12.1.7 ref函数 练习12 指向地址 第13章 面向对象的Perl 13.1 OOP范型 13.1.1 回顾包和模块 13.1.2 一些面向对象的专用术语 13.2 类、对象和方法 13.2.1 类和专用性 13.2.2 对象 13.2.3 bless函数 13.2.4 方法 13.2.5 多态性和动态绑定 13.2.6 析构函数和无用存储单元收集 13.3 继承 13.3.1 @ISA数组和调用方法 13.3.2 $AUTOLOAD,sub AUTOLOAD和UNIVERSAL 13.3.3 派生类 13.3.4 多重继承 13.3.5 面向对象术语--父方法 13.4 公共用户接口:文档编制类 13.4.1 pod文件 13.4.2 pod命令 13.4.3 如何使用pod解释程序 13.4.4 将pod文档翻译成文本 13.4.5 将pod文档翻译成HTML 13.5 使用Perl库中的对象 13.5.1 再看标准Perl库 13.5.2 标准Perl库中面向对象的模块 13.5.3 使用标准Perl库中的模块 练习13 这一课的对象是什么 练习14 函数Pod中的Perl 第14章 tie函数,DBM文件和数据库挂钩 14.1 连接变量与类 14.1.1 tie函数 14.1.2 预定义方法 14.1.3 连接标量 14.1.4 连接数组 14.1.5 连接散列 14.2 DBM文件 14.2.1 创建并赋给DBM文件数据 14.2.2 从DBM文件检索数据 14.2.3 从DBM文件中删除项 第15章 Perl数据库编程 15.1 本章概述 15.2 Perl数据库编程 15.3 使用RDBMS的Perl编程 15.3.1 在Windows系统上安装Perl 15.3.2 使用PPM在Windows系统上安装Perl模块 15.3.3 安装RDBMS 15.3.4 为MMS范例创建DSN 15.4 使用ADO和DBI访问MSS 15.4.1 Microsoft SQL Server--范例15-1和15-3的查询 15.4.2 范例15-1:ex1.p1在MS SQL Server上的ADO简单查询,DSN 15.4.3 执行DDL和DML操作 15.4.4 范例15-2:ex2.p1 MSS上persons.sql的Perl ADO,无DSN 15.4.5 范例15-3:ex3.p1 MS SQL Server上的Perl DBI范例 15.4.6 范例15-4:ex4.p1 MSS上persons.sql的Perl DBl 15.5 使用ADO和DBI访问Oracle 15.5.1 Oracle--范例15-5(ADO)和15-7(DBI)的简单查询 15.5.2 为Oracle范例创建DSN 15.5.3 范例15-5:ex5.p1 Oracle上的ADO简单查询,DSN 15.5.4 在Oracle上执行DDL和DML操作 15.5.5 范例15-6:ex6.pl Oracle上persons.sql的Perl ADO,无DSN 15.5.6 范例15-7:ex7.pl Oracle上的Perl DBI简单查询 15.5.7 范例15-8:ex8.ploracle上persons.sql的Perl DBI 15.6 练习:非编程 练习15 使用MSS 练习16 在MSS中执行persons.p1 练习17 使用Oracle 练习18 在Oracle中执行persons.p1 15.7 参考文献 第16章 与系统接口 16.1 系统调用 16.1.1 目录和文件 16.1.2 目录和文件属性 16.1.3 查找目录和文件 16.1.4 创建目录--mkdir函数 16.1.5 删除目录--rmdir函数 16.1.6 更改目录--chdir函数 16.1.7 通过目录文件句柄访问目录 16.1.8 许可和所有权 16.1.9 硬和软链接 16.1.10 更改文件名 16.1.11 更改访问和修改时间 16.12 文件统计量 16.1.13 低级文件I/O 16.1.14 压缩和解压缩数据 16.2 进程 16.2.1 UNIX进程 16.2.2 Win32进程 16.2.3 环境(UNIX和Windows) 16.2.4 进程和文件句柄 16.2.5 进程优先权和Nice 16.2.6 口令信息 16.2.7 时间和进程 16.2.8 UNIX进程创建 16.2.9 Win32进程创建 16.3 其他与操作系统接口的途径 16.3.1 syscall函数和h2hp脚本 16.3.2 命令替换--备份引号 16.3.3 Shell.pm模块(Perl) 16.3.4 system函数 16.3.5 here documents 16.3.6 Globbing(文件名扩展和通配符) 16.4 错误处理 16.4.1 die函数

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧