TCL语法中的文件访问

本文转载自: 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。

最新文章

最新文章