阻止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); } 解决方法
虽然在接收到请求的数据之前读取信号可能被信号中断,但是如果没有,则无法真正完成.
不幸的是,你必须检查返回值和计数字节.是的,最简单的方法是编写一个包装函数. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |