2

Tclは、スクリプト作成者が制御できない内部入力バッファリングを実行しますか?次のコードはエントロピーを浪費する可能性がありますか(1バイト以上を読み取る)、もしそうなら、どうすればそれを防ぐことができますか?

set stream [open "/dev/srandom"]
chan configure $stream -translation binary
set randomByte [chan read $stream 1]
4

1 に答える 1

4

はい、tclはデフォルトでバッファリングに設定されており、エントロピーを浪費します(1回のread呼び出しで引き渡すことを決定するのと同じくらい)。

で防げると思いました

chan configure $stream -buffering none

ただし、-buffering入力キューには影響しません(内部的には単一のバッファではありません)。

でも、

chan configure $stream -buffersize 0

stdinunderでの実験から見たように、トリックを実行しstraceます。これにより入力readはサイズ1のs(syscall)になります(TCLへの引数readは関係ありません)ので、通常の使用では非常に遅くなります。

于 2013-01-25T18:22:07.403 に答える