1

在打开 /dev/random 的文件描述符fd和其他健全性检查后,我试图读取设备可以读取的字节数,因此如果我的程序需要,我可以提取这个数量。

我的基本代码是这样的:

if (fd = open("/dev/random", O_RDONLY) < 0) {
  perror("open");
  return 1;
}
...
if(ioctl(fd, FIONREAD, &n) < 0) { //file descriptor, call, unsigned int
  perror("ioctl");
  return 1;
}
printf("%d bytes available for reading.\n", n);
return 0;

无论在何种情况下(如果需要,作为 root 或普通用户)它总是返回 0 个字节可供读取。

之前有人建议我这是一种检索我可以从设备中取出的内容的方法,你知道我的程序中可能出现的问题或故障导致它总是返回零吗?你知道任何其他方法来做我想做的事吗?

4

1 回答 1

2

您使用的是哪个 Linux 版本?在 2.6.32 你的程序输出

ioctl:参数无效

FWIW,我在 FIONREAD ioctl 中找到的文档说它适用于套接字、管道、FIFO 和 tty。/dev/random,OTOH,是一个字符特殊文件,所以结合“无效参数”errno 我会说 /dev/random 不支持 FIONREAD。

不,我不知道有任何简单的内置方法来计算 /dev/random 中的可用字节数。可能有用的一件事是让一个单独的线程从 /dev/random 读取数据并将其放入线程安全队列中,然后有一种方法以非阻塞方式检查队列是否为空(例如,构建pthread_mutex_trylock()) 周围。

于 2011-04-04T07:21:23.940 回答