我正在编写一个将在嵌入式设备上使用的Tcl脚本。此脚本中的变量值将来自系统上的文本文件。我担心的是,如果源文件太大,可能会导致设备崩溃,因为可能没有足够的内存来存储整个文件。我想知道变量的大小是否可以被限制,因此在输入变量时它不会耗尽整个内存量。
另外,如果可能限制变量的大小,它仍然会从源文件中尽可能多地填充信息,即使整个文件无法输入变量吗?
答案 0 :(得分:7)
您可以通过指定要从文件中读取的字符数来限制变量的大小。例如:
set f [open file.dat r]
set var [read $f 1024]
此代码最多可从文件中读取1024个字符(如果文件短于此字符,则自然会得到少于1024个字符。)
答案 1 :(得分:3)
ISTR,v8.5中任何变量的字符串表示的大小限制限制为2 GiB。但正如Eric已经说过的那样,在你的情况下,你不应该盲目read
将文件放入变量,而是要以块的形式处理文件的内容,或者至少先使用file stat
估计其大小,然后读取它,如果大小合适(但请注意,这种方法当然包含竞争条件,因为文件可以在检查和读取之间增长,但在您的情况下,这可能是也可能不是问题)。