我正在使用当前时间生成的一些随机数作为种子测试一些代码
随机(时间(0))
我希望每次运行时都能获得相同的随机数。所以我想在运行程序之前临时将当前时间的值设置为某个预定义值。请不要要求我暂时删除随机数,因为这非常重要。
另外,我没有root权限,所以我无法使用命令date
或其程序等效项设置日期/时间。
答案1
使用faketime
。
faketime '2013-03-14 08:25:30' ./your_program
如果您不是 root,您可以手动从发行版下载该程序。例如,如果您使用使用 APT 的 Debian 衍生产品:
aptitude download faketime
mkdir /tmp/faket/ dpkg-deb --extract faketime*.deb /tmp/faket
cp /tmp/faket/usr/bin/faketime ~
cp /tmp/faket/usr/lib/faketime/* ~
cd
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:."
./faketime '2013-03-14 08:25:30' ./your_program
答案2
如果没有 root 权限,您就无法在服务器上设置时间。另外,当您说“我希望每次运行时都获得相同的随机数”时,您确实将自己置于困境之中。
在运行应用程序/脚本/等时,您无法重复获取相同的随机数,因此您能做的最好的事情就是生成一个随机数,然后在每次运行应用程序进行测试时静态地使用该随机数。
答案3
如果没有 root 访问权限,您将无法执行所要求的操作;除非您可以创建虚拟机(但您需要在 VM 上拥有 root 权限)。为什么不假装呢?
time_t 时间(time_t *dummy) { 返回(atoi(getenv("FAKE_TIME"))); }
换句话说,选择一个要用作所有测试的种子的值,并将其分配给环境变量FAKE_TIME
。 完成测试后,将代码改回原样。
显然,这只是一个例子;您可以根据需要使逻辑更复杂。(但如果您在每次程序调用时只为随机数生成器播种一次,则可能不需要这样做。)
答案4
如果使用 ntpd (使用 检查service ntpd status
):
service ntpd stop
date --set="23 June 1988 22:22:55"
完成后:
ntpd -gq
service ntpd start