Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
Tcl 是否做任何不受脚本编写者控制的内部输入缓冲?下面的代码可能会浪费熵(读取超过 1 个字节),如果是这样,我该如何防止它?
set stream [open "/dev/srandom"] chan configure $stream -translation binary set randomByte [chan read $stream 1]
是的,tcl 默认为缓冲并且会浪费熵(就像单个read调用会决定移交一样多)。
read
我以为你可以用
chan configure $stream -buffering none
但是不,-buffering对输入队列没有影响(它不是内部的单个缓冲区)。
-buffering
然而,
chan configure $stream -buffersize 0
正如我从stdinunder的实验中看到的那样,可以做到这一点strace。它使任何输入进入read大小为 1 的 s(系统调用)(TCL 的参数read无关紧要),因此正常使用会非常慢。
stdin
strace