zoukankan      html  css  js  c++  java
  • Linux下随机数

    随机数是个好东西......
    1. 通过系统时间
    shell下通过命令:date +%s 获取秒数,date +%N 获取微妙。

    vm2207:~ # date +%s
    1313917706
    vm2207:~ # date +%N
    916630000

    PHP中,time(), microtime();

     1 <?php 
     2 function microtime_float() {     
     3     list($usec, $sec) = explode(" ", microtime());     
     4     return ((float)$usec + (float)$sec);
     5 } 
     6 $time_micro = microtime_float(); 
     7 echo $time_micro,"\n"; # 1313918504.9907 
     8 echo time(),"\n";    # 1313918504 
     9 echo microtime(),"\n";  # 0.99079800 1313918504 
    10 echo $_SERVER['REQUEST_TIME'];   # 1313918504 
    11 ?>

    Perl中,通过time()获取秒数,gettimeofday()获取微妙。

    1 #!/usr/bin/perl
    2 use Time::HiRes qw(gettimeofday);
    3 ($sec, $usec) = gettimeofday;
    4 print $sec,"  ",$usec,"\n";  # 1313919786  389419
    5 print time(),"\n";  # 1313919786

    2. 函数或变量
    php, perl中有一堆的rand函数。
    shell下有echo $RANDOM。

    3. /dev/random 和 /dev/urandom
    前者真随机(系统记录一下随机事件,一些硬件的interrupts),后者很真的伪随机。具体用法的话,如果Linux中的熵用完了,前者会挂起,等待新的随机事件发生并产生随机变量;而后者不会挂起。
    可以通过cat /proc/sys/kernel/random/entropy_avail 查看熵的多少。
    读取/dev/random,生产随机数的C语言实现:

     1 #include <stdio.h>
     2  
     3 int main( int argc, char** args )
     4 {
     5     unsigned long* seed = malloc( sizeof( unsigned long ) );
     6     FILE* file = fopen("/dev/random", "r");
     7     printf( "%d\n", sizeof( unsigned long ) );
     8     int i;
     9     for( i = 0; i < 9999; ++i)
    10     {
    11         fread( seed, 1, sizeof( unsigned long ), file );
    12         printf( "%lld\n", *seed );
    13     }
    14     return 1;
    15 }

    可以看到当使用/dev/random时,会有等待出现;使用/dev/urandom则不会。
    运行上述程序,然后
    vm2207:/home/random # cat /proc/sys/kernel/random/entropy_avail
    163
    才162个,一般有4K多个。

    也可以在shell中通过
    head -200 /dev/urandom | cksum
    head -200 /dev/urandom | cksum | cut -f1 -d” ”
    来获取随机数。

    参考:

    http://www.cnblogs.com/chengmo/archive/2010/10/23/1858879.html

    http://hi.baidu.com/jrckkyy/blog/item/9e29c9cb8f283f0ebf09e600.html

    http://www.orawh.com/31.html

  • 相关阅读:
    解决:Could not resolve archetype org.apache.maven.archetypes
    Spring MVC配置MyBatis输出SQL
    Spring集成MyBatis 通用Mapper以及 pagehelper分页插件
    关于SpringMVC或Struts2接受参数接收不到的原因
    配置quartz启动时就执行一次
    ajaxFileUpload进行文件上传时,总是进入error
    spring mvc注入配置文件里的属性
    java中将一个文件夹下所有的文件压缩成一个文件
    flume failed to start agent because dependencies were not found in classpath
    ubuntu不能安装pip unable to install pip in unbuntu
  • 原文地址:https://www.cnblogs.com/cloudstorage/p/2588122.html
Copyright © 2011-2022 走看看