私はread (2)
ファイルから読み取るために使用しています(/dev/random
データの到着が非常に遅い場合)。
ただし、read()は数バイトを読み取った後に返されますが、指定されたバイト数が読み取られるまで(またはエラーが発生するまで)待機したいので、戻り値は常にcount、つまり-1である必要があります。 。
この動作を有効にする方法はありますか?open (2)
およびマンページには、そのトピックに関する有用な情報は含まれていません。read (2)
また、インターネット上でそのトピックに関する情報も見つかりませんでした。
私はread()
、whileループの内側に配置し、すべてのデータが読み取られるまでそれを呼び出すという回避策を十分に認識しています。これが、whileループソリューションの場合の非決定論的O(n)ではなく、決定論的動作を生成し、O(1)システムコールのみを含む適切な方法で達成できるかどうかを知りたいだけです。
次の最小限の例は、問題を再現します。
#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);
}