私を編集してください: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;
}
(エラーも確認する必要があります。)