getentropy函数用法详解
getentropy函数简介
- 头文件包含
#include <unistd.h>
- 函数定义
int getentropy(void * buffer , size_t length );
getentropy函数常见使用错误
- 编译错误
warning: implicit declaration of function ‘getentropy’ [-Wimplicit-function-declaration]
解决办法:包含头文件
#include <unistd.h>
getentropy函数详细描述
getentropy ()函数从buffer 指向的位置开始将length字节的高质量随机数据写入缓冲区。length参数的最大允许值是256。
对getentropy ()的成功调用总是提供所请求的熵字节数。
getentropy函数返回值
如果成功,该函数返回零。出错时,返回-1,并适当地设置errno。
getentropy函数错误码
- EFAULT buffer和length指定的部分或全部缓冲区不在有效的可寻址内存中。
- EIO length大于256。
- EIO 尝试用随机数据覆盖buffer时出现不明错误。
- ENOSYS 这个内核版本不实现实现这个函数所需的getrandom (2)系统调用。
getentropy函数其他说明
getentropy ()函数是使用getrandom (2)实现的
尽管glibc包装器使getrandom (2)成为一个取消点,但getentropy ()不是一个取消点。
getentropy ()也在<sys/randomh> 中声明(不需要定义特性测试宏来从该头文件中获取声明。)
如果系统刚刚启动,内核还没有收集到足够的随机性来初始化熵池,那么对getentropy ()的调用可能会阻塞。在这种情况下,即使信号被处理,getentropy ()也会保持阻塞,并且只有在熵池被初始化后才会返回。
评论区