有没有办法控制/ dev / urandom
的速度例如,我有这样的二进制序列生成器:
grep -ao "[01]" /dev/urandom|tr -d \\n
我需要让它更慢,第二个100个符号,第二个1000个符号。
答案 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