【发布时间】:2015-01-14 23:57:25
【问题描述】:
我strace'd 使用 perl 和 bash 编写了一个简单的脚本。
$ strace perl -e 'echo "test";' 2>&1 | grep 'random'
open("/dev/urandom", O_RDONLY) = 3
$ strace bash 'echo "test"' 2>&1 | grep 'random'
$
为什么 perl 需要 pseudorandom number generator 来编写这样一个微不足道的脚本?我希望仅在第一次使用随机数据后打开 /dev/urandom。
编辑:我还测试了 python 和 ruby
$ strace python -c 'print "test"' 2>&1 | grep random
$
$ strace ruby -e 'print "test\n"' 2>&1 | grep random
open("/dev/urandom", O_RDONLY|O_NOCTTY|O_NONBLOCK|O_CLOEXEC) = 3
为什么perl和ruby打开方式不同?
【问题讨论】:
-
也许是为了播种自己的 PRNG?
-
生成随机数并不是一件简单的事情。 /dev/random 允许访问机器中的“随机”数据,因此 perl 使用它。否则你将如何获得随机输入?你对它的完成方式有什么问题?你需要“更好”的伪随机数吗?
-
我在我的系统上尝试了同样的方法。它仅从
/dev/urandom读取 4 个字节,然后将其关闭。 -
在 5.20 effectiveperlprogramming.com/2014/06/… 进行测试会很有趣
-
这可能是相关的? github.com/Perl/perl5/blob/…
标签: python ruby linux bash perl