从/ dev / random读取随机双精度(c)

时间:2012-08-03 15:19:09

标签: c linux random

仍然无法生成随机种子。这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>

double dev_random_seed(){
  double randval;
  FILE* f;

  f = fopen("/dev/random", "r");
  if(f == NULL){
    fprintf(stderr, "WARNING: Failed to open /dev/random. Random seed defaults to 1. \n");
    return 1;
  }

  fread(&randval, sizeof(double), 1, f);
  fclose(f);
  return randval;
}

int main(int argc, char** argv){
  double arse = dev_random_seed();

  printf("errno: %i\n",errno);
}

其输出为:

errno: 22

是EINVAL。无法发现错误,我吮吸c。

2 个答案:

答案 0 :(得分:1)

除非您有错误,否则请勿检查错误 可能是一个库提前设置了errno的值,因为它代表了一个原因,后面的部分将不知道如果后面的部分有错误(抱歉可能更清楚)

请参阅https://www.securecoding.cert.org/confluence/pages/viewpage.action?pageId=6619179

答案 1 :(得分:0)

如果没有错误,你不应该检查errno。要通知main发生错误,您可以使用以下代码:

if (fread (&randval, sizeof(double), 1, f)<0) return NAN;

,相应地,在主要:

if (isnan (arse)) printf ("Error has occured: %i\n",errno);