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
转载于:https://www.cnblogs.com/zyw567/p/9685603.html