但是,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)直到所有计数字节都到达所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)