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队列的内容,然后进行处理,返回不同的信息。
![clip_image002[4] clip_image002[4]](http://www.ninimall.com/files/images/blog/2019/20170319/636255607978109601282327.jpg)
![clip_image004[4] clip_image004[4]](http://www.ninimall.com/files/images/blog/2019/20170319/636255607994673396237733.jpg)
![clip_image005[4] clip_image005[4]](http://www.ninimall.com/files/images/blog/2019/20170319/636255608006080523618125.png)
![clip_image007[4] clip_image007[4]](http://www.ninimall.com/files/images/blog/2019/20170319/636255608019831595765970.jpg)
![clip_image008[4] clip_image008[4]](http://www.ninimall.com/files/images/blog/2019/20170319/636255608031863775967451.png)
![clip_image010[4] clip_image010[4]](http://www.ninimall.com/files/images/blog/2019/20170319/636255608042177076240926.jpg)
![clip_image011[4] clip_image011[4]](http://www.ninimall.com/files/images/blog/2019/20170319/636255608054834308344191.png)
![clip_image013[4] clip_image013[4]](http://www.ninimall.com/files/images/blog/2019/20170319/636255608063897512680417.jpg)
![clip_image014[4] clip_image014[4]](http://www.ninimall.com/files/images/blog/2019/20170319/636255608072648196491566.png)
![clip_image016[4] clip_image016[4]](http://www.ninimall.com/files/images/blog/2019/20170319/636255608084055332864449.jpg)
![clip_image017[6] clip_image017[6]](http://www.ninimall.com/files/images/blog/2019/20170319/636255608094837419143458.png)
![clip_image018[4] clip_image018[4]](http://www.ninimall.com/files/images/blog/2019/20170319/636255608109526055320437.png)
![clip_image019[4] clip_image019[4]](http://www.ninimall.com/files/images/blog/2019/20170319/636255608121245719950346.png)
![clip_image017[7] clip_image017[7]](http://www.ninimall.com/files/images/blog/2019/20170319/636255608134527996354288.png)

