【发布时间】:2013-07-10 21:02:47
【问题描述】:
我在使用File::Temp时遇到了一个奇怪的问题:
我在 Linux 上的 Apache 中的 mod_perl 下运行我的 perl 脚本,Apache 使用 worker mpm 运行。
my ($fh_error, $error)
= tempfile("error_XXXXXXXXXXXXXXXX",DIR => "/home/tmp", UNLINK => 1);
my ($fh_src, $src)
= tempfile("src_XXXXXXXXXXXXXXXX",DIR => "/home/tmp", UNLINK => 1, SUFFIX => ".html");
my ($fh_dst, $dst)
= tempfile("dst_XXXXXXXXXXXXXXXX",DIR => "/home/tmp", UNLINK => 1, SUFFIX => ".html");
大多数时候,一切似乎都很好,但时不时我会得到一些错误的文件名。 我没有得到真正的随机文件名,而是得到所有模板长度的相同字母。
例如
error_AAAAAAAAAAAAAAAA
src_AAAAAAAAAAAAAAAA
dst_AAAAAAAAAAAAAAAA
所有 3 个文件的名称相同。 除了这很奇怪(而且你永远不希望你的代码很奇怪)之外,我担心这可能会导致读取/写入同一个文件以针对不同的请求。
【问题讨论】:
-
猜测:也许你的熵用完了?您是否在系统上运行了 munin(或类似的东西),您是否在“可用熵”图中看到了可疑的东西?
-
他妈的还没想到,现在100-200有点低
-
是的,但即使熵为零,
/dev/urandom仍应继续提供良好的伪随机数。它们只是在密码学上不强(即,对于足够大的 N,使用 N 个连续的随机数,理论上您可以计算出 N+1 的更好几率)。
标签: perl mod-perl temporary-files