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

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

概述我正在使用read(2)从文件中读取(/ dev / random,其中数据非常缓慢地到达). 但是,read()在读取几个字节后返回,而我希望它等到读取指定的字节数(或发生错误),因此返回值应始终为count,或-1 . 有没有办法启用此行为? open(2)和read(2)联机帮助页不包含有关该主题的任何有用信息,也未在Internet上找到有关该主题的任何信息. 我完全了解将read()放入 我正在使用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: %lu\n",bytes); //output is random,usually 8.        close(fd);}
解决方法 虽然在接收到请求的数据之前读取信号可能被信号中断,但是如果没有,则无法真正完成.

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

总结

以上是内存溢出为你收集整理的阻止Linux读取(2)直到所有计数字节都到达全部内容,希望文章能够帮你解决阻止Linux读取(2)直到所有计数字节都到达所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/1025066.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存