Tcl 如果输入缓冲区在任何换行符之前溢出,GETS命令会发生什么情况?

Tcl 如果输入缓冲区在任何换行符之前溢出,GETS命令会发生什么情况?,tcl,Tcl,假设使用构造:而{[gets$id line]>0}{…}。现在,如果单行大小大于输入缓冲区大小,该怎么办?Tcl将在没有新行接收时缓冲数据,只要内存可用,并且在没有新行时会死机。由于这可能用于DoS攻击,因此引入了chan pending命令。此命令可用于在缓冲数据超过限制时采取措施 注意:chan pending仅在与非阻塞通道一起使用时才有帮助。只要内存可用,Tcl将在未接收换行时缓冲数据,如果没有,则会死机。由于这可能用于DoS攻击,因此引入了chan pending命令。此命令可用于在

假设使用构造:
而{[gets$id line]>0}{…}
。现在,如果单行大小大于输入缓冲区大小,该怎么办?

Tcl将在没有新行接收时缓冲数据,只要内存可用,并且在没有新行时会死机。由于这可能用于DoS攻击,因此引入了
chan pending
命令。此命令可用于在缓冲数据超过限制时采取措施


注意:
chan pending
仅在与非阻塞通道一起使用时才有帮助。

只要内存可用,Tcl将在未接收换行时缓冲数据,如果没有,则会死机。由于这可能用于DoS攻击,因此引入了
chan pending
命令。此命令可用于在缓冲数据超过限制时采取措施


<> >注释:<代码>陈腐只适用于非阻塞通道。

可能考虑使用Read而不是GET,并指定一次要读取的字符数。从上次我做了一些TCL编码以来,我已经有一段时间了。但是可能会将GET放入[catch{[gets$id line]}result]}{以某种方式处理错误}(??)我怀疑这将是一条非常非常非常长的线。我相信GET将读取到您拥有的内存量@DonalFollows您能确认吗?是的,
获取
似乎会继续读取,只要内存可用。与使用<代码>缓冲区大小< 0 /代码>关闭缓冲区相同。可能考虑使用Read而不是GET,并指定一次要读取的字符数。从上次我做了一些TCL编码以来,我已经有一段时间了。但是可能会将GET放入[catch{[gets$id line]}result]}{以某种方式处理错误}(??)我怀疑这将是一条非常非常非常长的线。我相信GET将读取到您拥有的内存量@DonalFollows您能确认吗?是的,
获取
似乎会继续读取,只要内存可用。与使用
-buffersize 0
关闭缓冲时相同。这完全正确。如果要限制传入缓冲区使用的内存,必须使用非阻塞I/O。幸运的是,Tcl在这方面非常擅长。检查缓冲区大小的点是当
chan blocked
/
fblocked
返回true时(在
获得
软失败后)。这完全正确。如果要限制传入缓冲区使用的内存,必须使用非阻塞I/O。幸运的是,Tcl在这方面非常擅长。检查缓冲区大小的点是当
chan blocked
/
fblocked
返回true时(在
获得
软故障后)。