加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

阻止Linux读取(2)直到所有计数字节都到达

发布时间:2020-12-14 00:52:31 所属栏目:Linux 来源:网络整理
导读:我正在使用read(2)从文件中读取(/ dev / random,其中数据非常缓慢地到达). 但是,read()在读取几个字节后返回,而我希望它等到读取指定的字节数(或发生错误),因此返回值应始终为count,或-1 . 有没有办法启用此行为? open(2)和read(2)联机帮助页不包含有关该主
我正在使用read(2)从文件中读取(/ dev / random,其中数据非常缓慢地到达).

但是,read()在读取几个字节后返回,而我希望它等到读取指定的字节数(或发生错误),因此返回值应始终为count,或-1 .

有没有办法启用此行为? open(2)和read(2)联机帮助页不包含有关该主题的任何有用信息,也未在Internet上找到有关该主题的任何信息.

我完全了解将read()放入while循环并调用它直到读取所有数据的解决方法.我只想知道这是否可以以适当的方式实现,产生确定性行为并且仅涉及O(1)系统调用,而不是在while循环解决方案中的非确定性O(n).

以下最小示例再现了该问题.

#include <stdio.h>

#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int main() {
        int fd = open("/dev/random",0);

        char buf[128];
        size_t bytes = read(fd,buf,sizeof(buf));

        printf("Bytes read: %lun",bytes); //output is random,usually 8.

        close(fd);
}

解决方法

虽然在接收到请求的数据之前读取信号可能被信号中断,但是如果没有,则无法真正完成.

不幸的是,你必须检查返回值和计数字节.是的,最简单的方法是编写一个包装函数.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读