read from /dev/urandom 返回值异常

 1 #include<stdio.h>
 2 #include<iostream>
 3 #include <fcntl.h>
 4 #include <sys/mman.h>
 5 using namespace std;
 6 int main(int argc,char* argv[])
 7 {
 8     ssize_t bytesToWrite = 32*1024*1024;
 9     const char *pathZero = "/dev/zero";
10     int fdZero = open(pathZero, O_RDONLY);
11     void *pageBuffPtr = mmap(NULL, bytesToWrite, PROT_READ | PROT_WRITE, MAP_PRIVATE, fdZero, 0);
12     int randomData = open("/dev/urandom", O_RDONLY);
13     if (randomData < 0)
14     {
15         // something went wrong
16     }
17     else
18     {
19         char* myRandomData;
20         ssize_t result = read(randomData, pageBuffPtr, bytesToWrite);
21         if (result < 0)
22         {
23             // something went wrong
24         }
25         cout <<"len:"<<bytesToWrite << endl;
26         cout <<"result:"<<result << endl;
27     }
28     return 0;
29 }

以上代码运行在suse12上,len和result总是差1

后来查看urandom的man手册中有这么一句:Since Linux 3.16, a read(2) from /dev/urandom will return at most 32 MB

即最大只能读 32MB -1

posted @ 2018-09-21 11:17  宇尉  阅读(362)  评论(0编辑  收藏  举报