mmap /dev/随机

mmap /dev/随机

为什么我不能 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/urandomseek()在这件事上你也不能。一般来说,你不能做mmap()不可寻求的事情。管道是您无法找到的事物的另一个例子,mmap()因为它们不可查找。

/dev/random本质上是/dev/urandom基于流的顺序访问设备。当您读取它们时,它们会按需生成字节。随机访问这些设备没有任何意义。mmap()意味着随机访问。

相关内容