/ dev/random不会阻塞

Awa*_*ais 1 c unix linux random entropy

我试图从/ dev/random收集真正的随机数.这是我的简单代码:

u_char buf[256];

memset(buf, 0, 256);

int dev = open("/dev/random", O_RDONLY);

int nbr = read(dev, buf, 100);

printf("Number of bytes returned : %d\n", nbr);
Run Code Online (Sandbox Code Playgroud)

你可以看到我要求100个随机字节,但是当我运行这个程序时,我总是得到变量nbr的输出,范围是15到30这是可以理解的,因为/ dev/random并不总是有足够的熵但是我的期望是那个在read()时,/ dev/random应该阻塞,直到它将我的缓冲区填充到100个随机字节,在这种情况下不会发生并且程序不会阻塞.我读了/ dev/random的手册页.它说

当熵池为空时,来自/ dev/random的读取将阻塞,直到收集到额外的环境噪声.

这是否意味着/ dev/random只会在熵池为时阻塞,并且当它有任何数量的数据时是否会阻塞,无论它是否小于所需的字节数?

任何帮助,将不胜感激.

CB *_*ley 5

这并不特别/dev/random,这只是行为read.该参数是一个缓冲区大小,read将返回该大小的可用内容.

考虑使用a FILE*fread不是读取一个100字节的块.