C
/dev/urandom 每次都返回相同的值
編輯 I: 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
(它甚至會自行清理!)
那麼,這個問題有多愚蠢呢?
當它需要一個文件描述符時,您正在使用
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; }
(您還應該檢查錯誤。)