1

私が開発しているライブラリの目的の 1 つは、指定されたバイト数をファイルから取得することです。この特定のケースでは、エントロピー ベースのランダム シーケンスを取得するために/dev/randomにアクセスしたいと考えています。

fread に関する私の主な問題は、より多くのエントロピーを待っているときに無期限にハングすることであり、これは望ましくありません。私の次の選択は、 fread を feof でラップしてバイトをチャンクで取得することでした。そうすれば、少なくともより良いエクスペリエンスのために完全なパーセンテージを提供できますが、収集できるものから反復 1、2、3、4.. のバイトは必要な量を正確に追跡するのは困難です。

私が探しているもの、必要な正確な量、およびチャンクを可能にするC標準のメソッドはありますか? これのタイムアウトを探す場合、データ要求をスレッド化することは良い選択肢でしょうか?

4

2 に答える 2

1

「標準」を定義します。ISO C規格のことですか?POSIX? Linux 標準ベース (LSB)? POSIX の場合、読み取り呼び出しを使用すると、読み取ろうとしているバッファーのサイズを指定できます。ブロックの代わりにタイムアウトを使用して、 pselectまたはpollを使用して、読み取り可能なバイトがあるかどうかを判断できます。Linux では、「FIONREAD」ioctl呼び出しを使用して、読み取り可能な正確なバイト数を取得できます。

とはいえ、そのレベルのエントロピーが必要かどうかを自問する必要があります。「/dev/urandom」からの読み取りを回避できる場合もあります (またはできない場合もあります)。もちろん、そうであるかどうかを判断する必要があります。

于 2011-04-01T02:14:39.887 に答える
0

これを試して

これは、問題を解決すると思われる機能のマニュアルページです。

http://www.manpagez.com/man/3/fgets/

fread が機能していないことがわかりました。fgets は、ファイル ストリームから一定数の byes をバッファーに読み取ります。

于 2011-04-01T02:09:24.587 に答える