更多博客

Loading...

更多资源

Loading...

更多论坛

Loading...
  • 全部 (22)
2008-09-02 IT从业人员必看的10个论坛
描述:   IT方面的论坛太多了,有综合,有专业,有行业,在各个论坛里混了几年,体会颇深,以前是论坛哪里人多,往哪里去,新浪论坛,网易是经常去的,人多啊,好几十万,去了以后才发现没有意思,没有共同的语言,于是逛专业论坛,行业论坛,终于找到了共同语言,总结一下论坛的经验:人不在多,有仙则灵,贴不在多,有精则行,逛了大半辈子,一个IT人发展方向一定要除了技术外,业务,理论,思想一个都不能少,于是我推荐如下这些论坛,或许真能帮助您,做论坛,都是赔本的买卖,不收费还帮助你学习,得向斑竹们致敬啊。      以下论坛排名不分先后,还有许多业界知名的论坛,主要有点偏门,这个不做概述,呵呵。    %2
2008-09-02 tcl/tk参考——系统相关pid
描述:名称pid - 获得进程ID 语法pid ?fileId?描述如果给出了fileId变元,fileId引用一个使用open命令创建的进程管道,在这种情况下pid返回一个列表,列表的元素是所有在管道中的进程的标识符,如果fileId引用的不是进程管道就返回一个空列表。如果没有fileId变元就返回当前进程的标识符,所有的标识符都以十进制数字字符串返回。 示例在读取管道里面的内容之前,打印使用SysV的ps程序创建的管道中的进程信息:set pipeline [open "| zcat somefile.gz | grep foobar | sort -u"]# 打印进程信息exec ps -fp [pid $pipeline] >@stdout# 打印管道信息然后再输出管道内容puts [string repeat - 70]puts [read $pipeline]close $pipeline
2008-09-02 tcl/tk参考——控制结构vwait
描述:名称vwait - 一直等待直到一个变量被修改为止 语法vwait varName描述这个命令进入Tcl事件循环,Tcl将会一直处理事件直到变量varName被修改为止,一旦varName被修改了,vwait命令将会立刻返回,varName必须是一个全局范围变量。(要么是一个全局变量,要么带有完全的名字空间路径)。 在一些情况下在varName被修改后vwait命令可能不会立刻返回,如果设置varName的事件句柄没有完成,那么vwait命令就不会立刻返回。例如,如果一个事件句柄设置varName,然后它自己调用vwait去等待一个不同的变量,这样的话有可能需要经过长时间后才能返回。在这种情况下最高堆栈层的vwait命令阻塞,等待事件句柄完成,所以不能返回。示例运行事件循环直到一些事件调用exit。vwait forever在连接一个服务器套接字时等待5秒钟,否则关闭套接字继续运行脚本。# Initialise the stateafter 5000 set state timeoutset server [soc
2008-09-02 tcl/tk参考——字符串操作re_syntax
描述:名称re_syntax - Tcl正则表达式语法 描述正则表达式描述了字符串中的字符,它是一个匹配特定的字符串而不匹配其他的字符串的模式。 不同的正则表达式正则表达式是由POSIX定义的,有两种形式,扩展的正则表达式(Extended RE)和基础正则表达式(Basic RE),EREs就是传统上说的egrep,BREs就是ed,还有第三种形式,基于EREs添加一些重要的扩展,叫做高级正则表达式(Advanced RE)。 这个用户手册主要描述AREs,BREs经常出现在需要向后兼容的程序当中,POSIX的EREs是AREs的一个子集,属于AREs但是不属于EREs的特性将会简单的指出来。正则表达式语法Tcl正则表达式使用Henry Spencer写的包来实现,基于POSIX 1003.2并参照了Perl5的扩展,本文中很多正则表达式的描述是直接复制Henry Spencer的用户手册。 一个ARE有一个或多个由"|"分开的分支,匹配任何需要匹配的分支。一个分支是一个或多个约束和量化元字符,它首先匹配好一个匹配,然后再进行第二个匹配,以此
2008-09-02 tcl/tk参考——控制结构update
描述:名称update - 处理挂起的事件和空闲回调 语法update ?idletasks?描述这个命令用来给应用程序“更新”,进入事件循环直到所有挂起的事件和空闲回调都执行完毕。 如果指定idletasks,就不处理新的事件或错误,只有空闲回调被调用,这就导致操作被延迟了,就像显示更新和窗口设计,会被立刻执行。当应用程序的状态发生变化和需要这些变化立刻显示时update idletasks命令是非常有用的,不用等待到脚本完成。多数显示更新被当作空闲回调来执行,所以update idletasks可以使它们运行。但是这里有一些更新只能在事件响应中发生,像窗口尺寸变化触发等,这些更新不会在update idletasks中发生。当运行一个长的运算但是仍然想和应用程序交互时,update命令在脚本中非常有用。示例运行一个循环约一秒钟后停止:set x 1000set done 0after 1000 set done 1while {!$done} { #一个无聊的例子 set x [expr {log($
2008-09-02 tcl/tk参考——系统相关time
描述:名称time - 计算一个脚本的执行时间 语法time script ?count?描述这个命令调用Tcl解释器去解释script命令count次(没有指定count为一次),返回一个如下格式的字符串503 microseconds per iteration指出了平均运行一次所花费的时间,测试时间为脚本执行时间,不是在CPU中的运行时间。 示例评估一个简单的for循环需要执行的时间: time { for {set i 0} {$i<1000} {incr i} { # empty body }}
2008-09-02 tcl/tk参考——系统相关glob
描述:名称glob - 返回模式匹配的文件名 语法glob ?switches? pattern ?pattern ...?描述 这个命令返回一个匹配pattern变元的文件列表,返回的列表并不排序,如果需要排序就需要调用lsort命令。 如果初始变元使用-开头,就作为标志出现,以下所述是目前支持的标志位:-directory directory 在给定的文件夹中寻找匹配的文件,允许在文件夹中寻找包含通配风格字符的文件,这个标志位不能和-path一起使用 -join 剩下的pattern变元被认为是一个路径名的各个部分,将会被组合起来,类似于file join命令的方式 -nocomplain 允许返回一个空列表而不是错误,如果没有这个标志位当寻找不到与模式匹配的文件时就返回一个错误 -path pathPrefix 寻找以pathPrefix开头、其它部分匹配给定模式的文件,这种模式允许在pathPrefix中出现glob敏感的匹配字符,不能够和-directory一起使用。例如,寻找所有包含相同$path根名字但
2008-09-02 tcl/tk参考——字符串操作regexp
描述:名称regexp - 为一个字符串进行正则表达式匹配 语法regexp ?switches? exp string ?matchVar? ?subMatchVar subMatchVar ...?描述如果正则表达式exp匹配上了string的部分或全部后就返回1,否则返回0。(指定了-inline后的情况如下)(正则表达式语法匹配描述在re_syntax中。) 如果指定了string后面的可选变元,那么matchVar将被赋值为于模式匹配的那部分字符串,第一个subMatchVar匹配第一个子模式匹配到的字符串,其它的以此类推。如果紧接着regexp的第一个变元以-开头,那么就会被当作可选项来处理,可以使用的选项如下:-about 不是去匹配正则表达式,而是返回一个包含着正则表达式信息的列表,列表的第一个元素为子表达式的个数,第二个元素为包含正则表达式各类描述信息的列表。这个可选项一般只用来作为调试使用。 -expanded 使正则表达式使用扩展语法,空格键和注释会被忽略,与指定了(?x)嵌入选项相同(参见re_syn
2008-09-02 tcl/tk参考——变量和过程array
描述:名称array - 处理数组变量 语法array option arrayName ?arg arg ...?描述这个命令执行几种可选项中的一个操作,操作的对象为arrayName,除非以下的命令特殊声明,否则arrayName必须是存在的数组变量名称。option变元决定了要对数组变量进行什么样的操作,具体如下: array anymore arrayName searchId 如果在一次数组搜索当中数组中还有剩余的元素就返回1,如果没有剩余的元素就返回0。searchId指定了被检查arrayName的搜索标示符,这个标示符必须是命令array startsearch返回的搜索标示符。这个命令在数组有空索引的元素时非常有用,因为array nextelement的返回值并不能说明搜索是否完毕。 array donesearch arrayName searchId 这个命令终结一次数组搜索,searchId指出了需要终结的数组搜索标示符,这个标示必须是命令array startsearch返回的搜索标示符。返回一个空字符串。
2008-09-02 tcl/tk参考——控制结构catch
描述:名称catch - 执行脚本并捕获错误 语法catch script ?resultVarName? ?optionsVarName?描述catch命令用来防止出现错误而导致脚本执行终止,catch命令可以调用Tcl解释器去执行脚本,并且能够正常返回。如果脚本产生一个错误,catch将返回一个非0的整数,如果没有捕获到错误就返回0或TCL_OK,Tcl还定义了四种异常代码:1(TCL_ERROR)、2(TCL_RETURN)、3(TCL_BREAK)和4(TCL_CONTINUE)。当执行脚本产生错误时就返回TCL_ERROR,其它的异常由return、break和continue命令产生。如果给出了resultVarName变元,当返回1时,存储在resultVarName中的为错误信息,如果返回0,存储在resultVarName中的为脚本运行结果。如果给出了optionsVarName变元,变量里面包含有-code和-level两个条目,如果返回代码不是TCL_RETURN时,-level为0,-code为返回的异常代码,当
2008-09-02 tcl/tk参考——控制结构error
描述:名称error - 产生一个错误 语法error message ?info? ?code?描述返回一个TCL_ERROR代码并且终止脚本运行,message存储错误消息。 解释器的-errorinfo可选项用来记录当错误发生时堆栈状况(通俗点说就是发生错误的地方),当命令执行时,解释器会给-errorinfo添加信息。如果info变元存在,就用来初始化-errorinfo。换句话说,包含error命令的命令不会出现在堆栈记录上,它的信息将被info代替。这个用法在catch中非常有用,当捕获一个不能够传递的错误时,info可以用来返回一个堆栈跟踪信息来反馈错误发生点。catch {...} errMsgset savedInfo $::errorInfo ...error $errMsg $savedInfo当在Tcl8.5或更新的版本中,下面的代码将被用于替代:catch {...} errMsg options ...return -options $options $errMsg如果code变元存在,它
2008-09-02 tcl/tk参考——控制结构eval
描述:eval - 调用一个Tcl脚本 语法eval arg ?arg ...?描述eval带一个或多个变元,可以有一个或多个命令组成,eval采用concat命令的风格连接所有变元,执行命令并且返回执行结果(或者错误)。 示例有的时候,把一些片断脚本连接存储起来然后再执行是很有用的,这种技术在很多Tcl内核中都有使用(比如在fcopy、lsort和trace命令的回调)。下面的命令给出了怎么去使用命令:set script { puts "logging now" lappend $myCurrentLogVar}set myCurrentLogVar log1# Set up a switch of logging variable part way through!after 20000 set myCurrentLogVar log2for {set i 0} {$i<10} {incr i} { # Introduce a random delay after [expr {int(5000 * rand())
2008-09-02 tcl/tk实例详解——after、update和vwait
描述:after有几种形式,使用比较灵活。 最简单的形式,间隔一定时间后再运行脚本: % after 5000 上面的命令就是间隔5秒钟后再继续运行脚本,这在等待其它设备处理时比较有效。 间隔一段时间后执行一条命令: % set a a a % after 5000 set a b after#1 间隔5秒钟后执行命令set a b,如果等待5秒钟后再查看$a的值就变成b了。需要注意的是,在tcl中,时间循环并没有开启,而tk中事件循环总是活动的,所以在tcl脚本中使用时需要非常小心,可能你需要的值在5秒钟后并没有改变,这里就需要使用到两个命令update和vwait,update命令可以时解释器去处理挂起的事件,vwait可以等待一个变量到修改为止,下面举例说明: 如果在5秒钟之后使用查看变量a里面的值: % puts $a a 还是a,并没有修改为b,那么这个时候使用update: % update % puts $a
2008-09-02 tcl/tk实例详解——string(三)
描述:这里对string命令中的几个子命令使用实例进行一些解释,以便于更加容易理解string命令中的各个子命令,本文仅对三个比较复杂的命令进行实例解析。分别是is class、map和match三个子命令。 string is class ?-strict? ?-failindex varname? string 如果string是指定class中的成员就返回1,否则返回0。如果指定了-strict,空字符串就返回0,不指定则返回1。如果指定了-failindex,那么将导致不匹配的索引储存在varname中,如果返回1则varname不会被赋值。列举了以下字符类: 判断字符串是否由字母和数字组成使用alnum: % string is alnum "abc123" 1 判断字符是否是由字母组成使用alpha: % string is alpha "abc" 1 任何ASCII码ascii: % string is ascii "^%*ajb1723" 1 布尔变量
2008-09-02 tcltk实例详解——列表操作(一)
描述:列表操作在脚本中使用的频率非常高,基本上每个脚本都会涉及到其中的一些操作,在这里对列表的命令进行实例解析,以加深对列表命令的理解,本文涉及的命令为list、concat、lrepeat、join和split。 list ?arg arg ...? concat ?arg arg ...? 使用多个arg来组成一个列表,这两个命令使用频度很高,使用也非常简单,所需要注意的地方就是list和concat的区别,以下使用具体的例子来说明两个命令的区别。 % list This is a tcltk example This is a tcltk example % concat This is a tcltk example This is a tcltk example 以上的例子并没有看出两个命令有什么区别,在这种情况下两个命令的结果并没有什么区别,两个命令的区别主要是list把后面的参数都当作列表的一个元素看待,形成的列表为所有的元素组成,而concat把后面的参数当作一个列表来看待,形成的列表为所
2008-09-02 tcl/tk参考——字符串subst
描述:subst - 完成反斜线、命令和变量替换 语法subst ?-nobackslashes? ?-nocommands? ?-novariables? string描述这个命令对string变元执行变量、命令和反斜杠替换,然后返回替换后的结果,替换的方式和执行Tcl命令的方式相同,string变元被替换两次,一次为Tcl命令的剖析器,另外一次为subst命令。 如果指定了-nobackslashes、-nocommands或-novariables标志位,那么相应的替换将不会执行,比如如果指定了-nocommands标志位,命令替换就不会发生,中括号被当作为普通字符处理。注意一种替换可以包含其他类型的替换,比如,当指定-novariables标志位,命令替换将会执行,这意味着任何完成命令需要进行的变量替换依然会发生。同样的,即使指定了-nocommands命令,任何完成变量替换需要进行的命令替换也会发生。如果在替换的过程中发生错误,subst命令返回错误。如果一个在命令替换或变量替换时发生break异常,替换返回的结果就是出现异常发生之前已经替换
2008-09-02 tcl/tk实例详解——string(二)
描述:这里对string命令中的几个子命令使用实例进行一些解释,以便于更加容易理解string命令中的各个子命令,本文仅对以下几个string命令进行实例解析。分别是repeat、replace、reverse、tolower、totitle、toupper、trim、trimleft、trimright、wordend和wordstart几个子命令。 string repeat string count 非常简单,返回一个把string重复count次的字符串。 % string repeat "This" 3 ThisThisThis string replace string first last ?newstring? 也很简单,使用newstring替换string中的first到last的字符串,如果没有newstring,就是使用空代替。 % string replace "This is a tcltk example" 10 14 TCLTK This is a TCLTK exam
2008-09-02 tcl/tk实例详解——string(一)
描述:这里对string命令中的几个子命令使用实例进行一些解释,以便于更加容易理解string命令中的各个子命令,本文仅对几个比较容易掌握的相对简单的string命令进行实例解析。分别是bytelength、length、compare、equal、range、index、first和last几个子命令。 如果对这些命令还不了解,请参考: string bytelength string string length string 两个命令都是返回字符串string的长度。 把以上的两个命令放在一起比较,更能够显现出两个命令的区别。 bytelength是计算一个字符串的字节数,而length是计算一个字符串的长度,如果字符串为标准的ASCII码组成,那么两个命令得到的结果是相同的。例如: % string bytelength "This is a tcltk example" 23 % string length "This is a tcltk example" 23
2008-09-02 tcl/tk参考——变量和过程variable
描述:名称variable - 创建和初始化一个名字空间变量 语法variable ?name value...? name ?value?描述这个命令一般在名字空间中创建一个或多个变量,每个变量name使用value初始化,最后一个变量的value是可选的。  如果变量name不存在,就创建一个,在这种情况下,如果指定了value,就把它的值赋值给创建的变量,如果不指定value,新的变量name就没有初始化。如果变量已经存在,就赋值value,没有指定value则保持原来的值。一般来说name不做任何限定(不包含名字空间限定),并且在当前名字空间中创建,如果name包含有名字空间限定,变量就创建在指定的名字空间中,如果变量没有定义,对于namespace which命令来说就是可见的,但是对info exists命令来说是不可见的。如果variable命令在一个tcl过程中执行,就创建一个局部变量,这个局部变量链接一个相关的名字空间变量(因此这些变量由info vars列出),这样variable命令类似global命令,虽然global命令只是链
2008-09-02 tcl/tk实例详解——if
描述:if条件,循环格式为:if expr1 ?then? body1 elseif expr2 ?then? body2 elseif ... ?else? ?bodyN? expr为判断条件,then可以省略,一般在写脚本的时候都不会写出then,body为各个条件体内执行的命令,elseif和else为多次判断的起始。举一个完整的例子来说明: % set x 3 % if {$x == 0} { puts "x = 0" } elseif {$x == 1} { puts "x = 1" } else { puts "x = $x" } x = 3 由于在if和elseif中的条件都不符合,所以就执行else里面的命令。 一个if语句最简单的形式就是单独的一条判断: % set x 1 1 % if {$x} {puts $x} 1 一般常用的命令体结构多为if...else,如果有多个else