为什么我不能 mmap/dev/random
或/dev/urandom
在 Linux 上?
我得到 errno 19 这是ENODEV
。
当我尝试使用相同的代码时,/dev/zero
它有效。
int fd = open(路径, O_RDONLY); 断言(fd > 0); void* 随机 = mmap(NULL, 大小, PROT_READ, MAP_PRIVATE | MAP_FILE, fd, 0); int err = 错误号; 断言(随机!= MAP_FAILED);
答案1
你不能mmap()
/dev/random
或/dev/urandom
。seek()
在这件事上你也不能。一般来说,你不能做mmap()
不可寻求的事情。管道是您无法找到的事物的另一个例子,mmap()
因为它们不可查找。
/dev/random
本质上是/dev/urandom
基于流的顺序访问设备。当您读取它们时,它们会按需生成字节。随机访问这些设备没有任何意义。mmap()
意味着随机访问。