mmap / dev / random

2

Por que não consigo mapear /dev/random ou /dev/urandom no Linux?

Eu recebo o erro 19, que é ENODEV .

Quando tento o mesmo código com /dev/zero , funciona.

    int fd = open(path, O_RDONLY);
    assert (fd > 0);

    void* random = mmap(NULL, size, PROT_READ, MAP_PRIVATE | MAP_FILE, fd, 0);
    int err = errno;

    assert (random != MAP_FAILED);
    
por stojanman 08.05.2015 / 17:46

1 resposta

9

Você não pode mmap() /dev/random ou /dev/urandom . Nem você pode seek() deles para esse assunto. E como regra geral, você não pode mmap() coisas não visíveis. Pipes são outro exemplo de coisas que você não pode mmap() porque elas não são procuráveis.

/dev/random e /dev/urandom são dispositivos sequencialmente baseados em fluxo e de acesso sequencial. Eles produzem bytes sob demanda quando você os lê. O acesso aleatório a esses dispositivos não tem significado. mmap() implica acesso aleatório.

    
por 08.05.2015 / 17:52

Tags