Tclは、スクリプト作成者が制御できない内部入力バッファリングを実行しますか?次のコードはエントロピーを浪費する可能性がありますか(1バイト以上を読み取る)、もしそうなら、どうすればそれを防ぐことができますか?
set stream [open "/dev/srandom"]
chan configure $stream -translation binary
set randomByte [chan read $stream 1]
はい、tclはデフォルトでバッファリングに設定されており、エントロピーを浪費します(1回のread
呼び出しで引き渡すことを決定するのと同じくらい)。
で防げると思いました
chan configure $stream -buffering none
ただし、-buffering
入力キューには影響しません(内部的には単一のバッファではありません)。
でも、
chan configure $stream -buffersize 0
stdin
underでの実験から見たように、トリックを実行しstrace
ます。これにより、入力read
はサイズ1のs(syscall)になります(TCLへの引数read
は関係ありません)ので、通常の使用では非常に遅くなります。