2

Tcl 是否做任何不受脚本编写者控制的内部输入缓冲?下面的代码可能会浪费熵(读取超过 1 个字节),如果是这样,我该如何防止它?

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

1 回答 1

4

是的,tcl 默认为缓冲并且会浪费熵(就像单个read调用会决定移交一样多)。

我以为你可以用

chan configure $stream -buffering none

但是不,-buffering对输入队列没有影响(它不是内部的单个缓冲区)。

然而,

chan configure $stream -buffersize 0

正如我从stdinunder的实验中看到的那样,可以做到这一点strace。它使任何输入进入read大小为 1 的 s(系统调用)(TCL 的参数read无关紧要),因此正常使用会非常慢。

于 2013-01-25T18:22:07.403 回答