내가 뭔가 잘못하고 있거나 정말 멍청한 짓을 하고 있는 것 같아요.

내가 뭔가 잘못하고 있거나 정말 멍청한 짓을 하고 있는 것 같아요.

저를 편집하세요: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

당신은 사용하고 있습니다readFILE파일 설명자가 필요한 경우 포인터를 사용하십시오.

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;
}

(오류도 확인해야합니다.)

관련 정보