svlib(2)- 目录操作
0赞svlib库中,提供了对目录的操作。其实是实现了一个类Pathname,来实现对目录操作的。
一、 Pathname类的使用
实现了一个类,Pathname来实现对目录的操作。该类的new方法是protected的,表示外部不可以调用new方法创建该对象实例。而是要通过其他方法来得到对象实例。
调用类的create方法,获取单例对象实例。需要传入待操作的目录。
以下是Pathname类提供的外部可以调用的方法:
如以下代码:
abs_dir设置为一个绝对路径的文件。
方法 | 说明 | 结果 |
get | 完整路径 | /home/jun.lu/test.sv |
dirname | 目录名 | /home/jun.lu/test |
dirname(2) | 目录名,去除最后一个目录 | /home/jun.lu |
extension | 文件扩展名 | .sv |
basename | 文件名,不包括文件扩展名 | /home/jun.lu/test/test |
tail | 路径的最后一部分 | test.sv |
tail(2) | 路径的最后两部分 | test/test.sv |
volume | 分隔符 | / |
isAbsolute | 路径是否是绝对路径 | 1 |
执行结果:
对于一个非绝对路径的文件。
执行结果,因为是相对路径,因此isAbsolute函数返回0。
二、 Pathname类解析
在Pathname类中,有一个qs类型的变量comp。
这是一个typedef定义的类型,在svlib_private_base_pkg.svh中,有定义。
qs是一个字符串类型的队列。
对于Pathname类,create方法。该方法,是获取单例对象。调用Obstack类,获取单例对象。然后调用Pathname类中的set方法。
对于Obstack,是一个参数化的类。参数就是类,这里就是Pathname。该类,继承Pathname,因此可以使用Pathname类的new方法,创建对象实例。
Pathname类的set方法。首先是调用Str类的create方法.
Str是一个类,该类的new方法也是protected,因此外部不能调用new方法创建该类对象实例。需要调用create方法,来获取对象实例。
同样是调用Obstack得到对象实例。然后调用Str类的setClean方法。其实就是将类中的protect变量value,设置为传入的参数。
调用Str类的split方法,对类中的value变量,按照指定的分隔符,进行切分,结果保存在动态数组components中。
将components中的内容,保存到 Pathname类的comps队列中。同时判断value的第一个字符内容是不是/,是的话,表示绝对路径,否则不是绝对路径。
假如传递的path为 /home/jun.lu/test/test.sv。
Pathname类中的set,append,apendPN,copy方法,会对comps这个队列内容进行修改。
而Pathname类中的其他的方法,其实就是根据comps队列的内容,然后进行处理,返回不同的信息。