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

转载于:https://www.cnblogs.com/zyw567/p/9685603.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值