![내가 뭔가 잘못하고 있거나 정말 멍청한 짓을 하고 있는 것 같아요.](https://linux55.com/image/111068/%EB%82%B4%EA%B0%80%20%EB%AD%94%EA%B0%80%20%EC%9E%98%EB%AA%BB%ED%95%98%EA%B3%A0%20%EC%9E%88%EA%B1%B0%EB%82%98%20%EC%A0%95%EB%A7%90%20%EB%A9%8D%EC%B2%AD%ED%95%9C%20%EC%A7%93%EC%9D%84%20%ED%95%98%EA%B3%A0%20%EC%9E%88%EB%8A%94%20%EA%B2%83%20%EA%B0%99%EC%95%84%EC%9A%94..png)
저를 편집하세요: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;
}
(오류도 확인해야합니다.)