私が何か間違っているか、本当に愚かなことをしているようです。

私が何か間違っているか、本当に愚かなことをしているようです。

私を編集してください: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;
}

(エラーも確認する必要があります。)

おすすめ記事