更改/ dev / urandom的速度

时间:2013-05-03 07:43:33

标签: performance shell random generator

有没有办法控制/ dev / urandom

的速度

例如,我有这样的二进制序列生成器:

grep -ao "[01]" /dev/urandom|tr -d \\n

我需要让它更慢,第二个100个符号,第二个1000个符号。

3 个答案:

答案 0 :(得分:2)

您可以使用pv(以及其他内容)来自管道的速率限制数据:

grep -ao "[01]" /dev/urandom | tr -d \\n | pv -q -L 100

这里我使用{limit}中的-L来获得每秒最多100个字节的输出速率。 -q用于抑制pv的调试输出。对于每秒1000个字节,您可以使用-L 1000-L 1k代替。

答案 1 :(得分:1)

如果你有perl,例如可以制作一个小脚本,例如cps.pl

#!/usr/bin/perl
use strict;
use warnings;
use Time::HiRes qw(usleep);
local $|=1;
while(<>) {
    chomp;
    print $_;
    usleep(100000);
}

并运行:

grep -ao "[01]" /dev/urandom | perl cps.pl

玩耍时间以获得正确的速度。也许也想用perl实现grep部分。

#!/usr/bin/perl

use strict;
use warnings;
use Time::HiRes qw( usleep);

open my $rfd, "<:raw", "/dev/urandom" or die "$!";
my $buff;
local $|=1;
while() {
        read ($rfd, $buff, 1);
        next unless $buff =~ /[01]/;
        usleep(10000);
        print $buff;
}
close $rfd;

然后只需运行perl cps.pl

<强>加了: 如果您不需要加密安全的randoms,您可以使用下一个单行程序:

perl -MTime::HiRes -e '$|=1;while(1){print int(rand(2)); Time::HiRes::usleep(10000)}'

答案 2 :(得分:-1)

根据处理器的不同,这可能会有很大差异,但尝试

很有趣
#!/bin/bash    
microsleep ()
{
  for (( y=0; y<$1*50; y++ ))
  do
    :
  done
}

tr -cd 01 </dev/urandom | while read -n1 b
do
  printf $b
  microsleep 1
done

结果

$ timeout 1 microsleep.sh > log

$ stat -c%s log
1011