저를 편집하세요:Linux용 Windows 하위 시스템.
내가 뭔가 잘못하고 있거나 정말 멍청한 짓을 하고 있는 것 같아요.
// random_problems.c
#include <stdio.h>
main(){
int rng;
FILE * urnd = fopen("/dev/random", "r");
read(urnd, &rng, 1);
close(urnd);
printf("%d\n", rng);
}
$ ./random_problems
32767
$ ./random_problems
32767
$ ./random_problems
32767
결과는 매번 똑같습니다.
예, 확인했습니다: /dev/random이 변경되고 있습니다.(줄 바꿈이 추가되었습니다)
[~] Connor >> head /dev/random -c 1
P
[~] Connor >> head /dev/random -c 1
m
나도 같은 문제에 직면했다 /dev/urandom
.
이 작은 스크립트를 사용하여 반복합니다.
echo "32767" > 32767; while [ $? -eq 0 ]; do ./random_problems > rng; diff -s rng 32767; done; rm rng 32767
(심지어 자체적으로 청소됩니다!)
그렇다면 이 질문은 얼마나 어리석은가?
답변1
당신은 사용하고 있습니다read
FILE
파일 설명자가 필요한 경우 포인터를 사용하십시오.
int urnd = open("/dev/random", O_RDONLY);
몇 가지 헤더를 추가해야 하며 적합한 바이트 수를 읽을 수도 있습니다 int
.
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
int main(int argc, char **argv){
int rng;
int urnd = open("/dev/random", O_RDONLY);
read(urnd, &rng, sizeof(int));
close(urnd);
printf("%d\n", rng);
return 0;
}
(오류도 확인해야합니다.)