仍然无法生成随机种子。这是我的代码:
#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。
答案 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);