脚本语言TCL教程:5

1.1 :文件存取

1. 文件打开命令:

格式:openfile fileName ? access ? permission

解释:

Ø fileName:文件名称

Ø access:存取模式

序号

存取模式

描述

1

r

打开文件读。文件必须已经存在

2

r+

打开文件读写。文件必须已经存在

3

w

打开文件写。如果文件不存在创建一个,长度设为零

4

w+

打开文件读写。如果文件不存在创建一个,长度设为零

5

a

打开文件写。文件必须已经存在,位置指到文件末尾

6

a+

打开文件读写,如果文件不存在,创建一个,位置指到文件末尾

Ø permission:权限,举一个例子:

1.2 :文件信息

1File命令提供文件信息

序号

函数

描述

1

file dirname

返回路径名

2

file extension

返回文件扩展名

3

file rootname

返回不包括扩展名的文件名

4

file tail

返回不包括路径名的文件名

5

file atime

返回最后一次文件存取时间

6

file executable

如果可执行返回1

7

file exists

如果文件存在返回1

8

file isdirectory

如果是个路径返回1

9

file isfile

如果是个文件返回1

10

file lstat

返回一个文件状态信息数组

atime:最后一次存取时间

ctime:最后文件状态改变时间

dev:设备节点

gid:文件的组id

ino:节点数

mode:节点保护模式

mtime:最后数据修改时间

nlink:硬链接数

size:文件字节数

type:文件类型

uid:文件用户id

注意:这个函数和file stat不同在于当为一个符号链接时,file lstat是得到链接的信息,而file stat是得到链接的文件的信息

11

file mtime

返回文件最后修改时间

12

file owned

如果用户是该文件所有者返回1

13

file readable

如果文件可读返回1

14

file readlink

返回符号链接的文件名

15

file size

返回文件大小(byte为单位)

16

file stat

返回一个文件状态信息数组

17

file type

返回文件类型

file:普通文件

directory:目录

characterSpecial:字符导向设备

blockSpecial:块导向设备

fifo:命名管道

link:符号链接

socket:套接字

18

file writable

如果文件可写返回1

2glob命令通过匹配模式返回一个文件名列表

格式:glob ?switches? pattern? patternN?

Ø switches

-nocomplain:允许返回一个空列表的时候不生成错误,如果没有这个开关,返回空列表的时候会生成错误

--:允许在匹配式中使用横杠

Ø pattern:匹配式

l {a,b,....}:匹配所有的ab,等字符串

l 文件名以小数点开头则解析为小数点,其他地方就解析为通配符;

l 所有的 / 都必须准确匹配;

l 如果匹配式开始是:~/ ,则 ~ 解析为环境变量HOME

1.3 如果匹配式的TCL中的子进程调用-open & exec

1. 格式:open |progName ?access?

功能:为管道返回一个文件描述符。如果progName用引号括起来,可以包含参数。

2. 格式:exec ?switches?arg1?arg2?....?argN?

功能:执行子进程

Ø switches-keepnewline:管道输出的每行后面加个新行。

-- :标志开关结束,哪怕后面跟着有开头的字符串,都作为参数处理。

Ø argN:参数可以是:可执行程序;作为子进程运行的命令行;输出重定向

输出重定向包含有:

序号

重定向

描述

1

|

将标准输出重定向到标准输入中

2

<fileName

管道中的第一个程序将读入文件内容

3

<@fileID

管道中的第一个程序将读入文件描述符中的内容,该文件描述符是使用 open...”r” 的返回

4

<<value

管道中第一个程序读到这个值

5

>fileName

管道中最后一个程序的输出内容覆盖写入文件

6

>>fileName

管道中最后一个程序的输出内容写入文件,添加到文件末尾

7

2>fileName

管道中所有程序的标准错误输出到文件,覆盖文件原有内容

8

2>>fileName

管道中所有程序的标准错误输出到文件,添加到文件末尾

9

>@fileID

管道中程序输出内容写到文件描述符,该文件描述符是使用open...”w” 打开

例子:027_file.txt

set io [open "|c:/windows/system32/notepad.exe c:/temp/inv_2700.tcl" r+] ;#open 调用外部程序

set invert [exec c:/windows/system32/notepad.exe c:/temp/001.txt] ;#exec 调用外部程序

因为管道的例子在windows下比较难举,现以unix下一段代码为例子,通过管道读出 ps(列出进程)命令的输出

tclfolder%tclsh

% set fid [open "|ps -ef" r+]

file5

% gets $fid line;puts "line: $line"

line: UID PID PPID C STIME TTY TIME CMD

% gets $fid line;puts "line: $line"

line: root 1 0 0 Nov 11 - 0:01 /etc/init

% gets $fid line;puts "line: $line"

line: root 86118 1 0 Nov 11 - 5:00 /usr/sbin/syncd 60

% gets $fid line;puts "line: $line"

line: tclll 90248 893094 0 11:54:55 pts/14 0:00 -csh

% gets $fid line;puts "line: $line"

line: root 110730 1 0 Nov 11 - 0:00 /usr/sbin/uprintfd

% gets $fid line;puts "line: $line"

line: root 118848 1 0 Nov 11 - 0:00 /usr/ccs/bin/shlap64

% exit

tclfolder%

1.4 :命令或者变量是否存在-info

1. info命令列表,使用的匹配式规则和string match一致,并且如果不使用匹配式,返回所有的项

序号

命令

描述

1

info commands ?pattern?

返回匹配的命令列表

2

info exists varName

变量存在返回一,否则返回零

3

info globals ?pattern?

返回全局变量列表

4

info locals ?pattern?

返回局部变量列表

5

info procs ?pattern?

返回过程列表

6

info vars ?pattern?

返回变量列表

例子:028_file.tcl

proc safeIncr {val {amt 1}} {

upvar $val v

if {[info exists v]} { incr v $amt} else { set v $amt }

}

if {[info procs safeIncr] == "safeIncr"} { ;#判断过程是否定义

safeIncr a ;#a 没有定义

}

puts "After calling SafeIncr with a non existent variable: $a" ;#返回1

set a 100

safeIncr a

puts "After calling SafeIncr with a variable with a value of 100: $a" ;#返回101

safeIncr b -3

puts "After calling safeIncr with a non existent variable by -3: $b" ;#返回-3

set b 100

safeIncr b -3

puts "After calling safeIncr with a variable whose value is 100 by -3: $b" ;#返回97

puts "\nThese variables have been defined: [lsort [info vars]]"

puts "\nThese globals have been defined: [lsort [info globals]]"

;# 检查本地过程是否存在

set exist [info procs localproc];

if {$exist == ""} {

puts "\nlocalproc does not exist at point 1"

}

proc localproc {} {

global argv;

set loc1 1;

set loc2 2;

puts "\nLocal variables accessible in this proc are: [lsort [info locals]]"

puts "\nVariables accessible from this proc are: [lsort [info vars]]"

puts "\nGlobal variables visible from this proc are: [lsort [info globals]]"

}

set exist [info procs localproc];

if {$exist != ""} {

puts "localproc does exist at point 2"

}

localproc;

1.5 :解释器状态-info

1. 关于当前解释器状态信息命令列表

序号

命令

描述

1

info cmdcount

返回解释器已经运行的命令的数量

2

info level ?number?

返回相应栈级别的过程的名字和参数

3

info patchlevel

返回全局变量解释器补丁版本和修订号tcl_patchlevel的值

4

info tclversion

返回全局变量解释器版本tcl_version

5

info script

返回当前脚本的名字

6

pid

返回当前解释器进程id

例子:029_file.tcl

puts "This is how many commands have been executed: [info cmdcount]"

puts "Now *THIS* many commands have been executed: [info cmdcount]"

puts "\nThis interpreter is revision level: [info tclversion]"

puts "This interpreter is at patch level: [info patchlevel]"

puts "\nThe temporary script this is executing is named: [info script]"

puts "The Pid for this program is [pid]"

proc factorial {val} {

puts "Current level: [info level] - val: $val"

set lvl [info level]

if {$lvl == $val} {return $val;}

return [expr ($val-$lvl) * [factorial $val]];

}

set count1 [info cmdcount]

set fact [factorial 3]

set count2 [info cmdcount]

puts "The factorial of 3 is $fact"

puts "Before calling the factorial proc, $count1 commands had been executed"

puts "After calling the factorial proc, $count2 commands had been executed"

puts "It took [expr $count2-$count1] commands to calculate this factorial"

1.6 :过程信息-info

1.关于过程信息的命令列表

序号

命令

描述

1

info args procname

返回一个过程的参数列表

2

info body procname

返回一个过程的内容

3

info default procname arg varName

如果一个过程的某个参数设置了缺省值则返回一,否则返回零

例子:030_procinfo.tcl

proc demo {argument1 {default "DefaultValue"} } {

puts "This is a demo proc. It is being called with $argument1 and $default"

}

puts "The args for demo are: [info args demo]\n"

puts "The body for demo is: [info body demo]\n"

set arglist [info args demo]

foreach arg $arglist {

if {[info default demo $arg defaultval]} { ;#defaultval 用于取回缺省值

puts "$arg has a default value of $defaultval"

} else {

puts "$arg has no default"

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值