本文转载自: FPGA打工人微信公众号
tcl对于文件的操作还是比较强大的,通过一些命令可以对文件进行一些操作。
open命令:
open name ?access?
open命令以access方式打开文件name,并返回供其他命令(close等)使用的标识。如果name第一个字符是’|’,管道命令会被触发,而不是打开文件。
access可选项如下:
tcl中有三个特定的文件标识:stdin,stdout和stderr,分别对应标准输入、标准输出和错误通道,这三个标识符任何时候都可以使用。
gets命令:
gets fileId ?varName?
读取fileId标识的文件下一行,忽略换行符。如果有varName,就会把该行赋值给它,并返回该行的字符数,如果没有varName,就会返回文件的下一行,当到了文件尾部时,则返回空字符串。
read命令:
read ?-nonewline? fileId
read fileId numBytes
和gets命令相似,但也有自己的形式。第一种形式是读并返回fileId标识的文件中所有剩下的字节,如果没有设置nonewline,则在换行符处停止;第二种形式是在fileId标识的文件中读并返回下一个numBytes字节。
puts命令:
puts ?-nonewline? ?fileId? string
puts命令把string写到fileId中,如果没设置nonewline,会添加换行符。fileId默认是stdout,命令返回值为一空字符串。注意的是puts产生的信息不会立即出现在目标文件中。
flush命令:
flush fileId
功能是把缓冲区内容写到fileId标识的文件中,命令返回空字符串。该命令是迫使缓冲区数据写到文件中,直到数据写完才返回。
close命令:
close ?fileId?
关闭标识为fileId的文件,命令返回值为一空字符串。
seek命令:
seek fileId offset ?origin?
把fileId标识的文件的访问点设置为相对于origin偏移量为offset的位置。origin可以是start,current,end,默认是start。命令的返回值是一空字符串。比如:
seek fileId 2000
改变fileId标识的文件访问点,以便下次读写开始于文件的第2000个字节。
seek的第三个参数说明偏移量从哪开始计算。第三个参数必为start,current或end中的一个。start是默认值:即偏移量是相对文件开始处计算。current是偏移量从当前访问位置计算。end是偏移量从文件尾开始计算。
tell命令:
tell fileId
返回fileId标识的文件的当前访问位置。
eof命令:
eof fileId
如果到达fileId标识的文件的末尾返回1,否则返回0。
对于管理当前工作目录,提供了两个命令:pwd命令和cd命令,这个和UNIX下的一样。
glob命令:
glob ?switches? pattern ?pattern ...?
返回模式匹配的文件名,匹配规则和string match命令一致,switches可以选择下面的值
比如:
glob *.v *.c
返回当前目录中所有.v或.c的文件名。
如果glob的模式以一斜线结束,那将只匹配目录名。例如:
glob */
只返回当前目录的所有子目录。
file命令:
file atime name
返回一个十进制的字符串,表示文件name最后被访问的时间。时间是以秒为单位从1970年1月1日12:00AM开始计算。
file copy ?-force? ?--? source target
file copy ?-force? ?--? source ?source ...? targetDir
这个命令把source中指明的文件或目录copy到目的地址targetDir,只有当存在-force选项时,已经存在的文件才会被覆盖。
file delete ?-force? ?--? pathname ?pathname ... ?
删除pathname指定的文件或目录,当指定了-force时,非空的目录也会被删除。
file dirname name
返回name中最后一个“/”前的所有字符;如果 name 不包含“/”,返回“.”;如果name 中最后一个“/”是第name的第一个字符,返回“/”。
file executable name
判断对name的执行权限,OK返回1,否则返回0。
file exists name
判断name是否存在于拥有搜索权限的目录,OK返回1,否则返回0。
file extension name
返回name中最后的“.”以后(包括这个小数点)的所有字符。如果没有“.”或最后斜线后没有“.”返回空字符。
file isdirectory name
判断name是否为目录,OK返回1,否则返回0。
file isfile name
判断name是否为文件,OK返回1,否则返回0。
file mkdir dir ?dir ...?
这个命令和UNIX的mkdir命令类似。
file mtime name
返回十进制的字符串,表示文件name最后被修改的时间。时间是以秒为单位从1970年1月1日12:00AM开始计算。
file owned name
判断name是否被当前用户拥有,OK返回1,否则返回0。
file readable name
判断当前用户是否对name可以进行读操作,OK返回1,否则返回0。
file readlink name
返回name代表的符号连接所指向的文件。
file rename ? -force? ?--? source target
file rename ?-force? ?--? source ?source ...? targetDir
这个命令同时具有重命名和移动文件(夹)的功能。把source指定的文件或目录改名或移动到targetDir下。只有当存在-force选项时,已经存在的文件才会被覆盖。
file rootname name
返回name中最后“.”以前(不包括这个小数点)的所有字符。
file size name
返回十进制字符串,以字节表示name的大小。
file stat name arrayName
调用stat内核来访问name,并设置arrayName参数来保存stat的返回信息。arrayName被当作一个数组,它将有以下元素:atime、ctime、dev、gid、ino、mode、mtime、nlink、size、type和uid。除了type以外,其他元素都是十进制的字符串,type元素和file type命令的返回值一样。其它各个元素的含义如下:
file tail name
返回name中最后一个斜线后的所有字符,如果没有斜线返回name。
file type name
返回文件类型的字符串,返回值可能是下列中的一个: file、directory、characterspecial、blockSpecial、fifo、link或socket。
file writable name
判断当前用户是否对name可以进行写操作,OK返回1,否则返回0。