我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);
}