mmap /dev/random

mmap /dev/random

/dev/random왜 mmap을 할 수 없거나 /dev/urandomLinux에서 할 수 없나요 ?

나는 errno 19를 얻습니다 ENODEV.

동일한 코드로 시도하면 /dev/zero작동합니다.

    int fd = open(경로, O_RDONLY);
    주장(fd > 0);

    무효* 무작위 = 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()랜덤 액세스를 의미합니다.

관련 정보