svlib(3)- 文件操作
0赞svlib提供了对文件操作的相关函数。
一、文件结构体
对于文件,svlib提供了一个结构体sys_fileStat_s,来管理文件的属性。
typedefstruct{ longintmtime;//修改时间 longintatime;//访问时间 longintctime;//创建时间 longintsize;//大小 intunsigneduid; intunsignedgid; sys_fileMode_smode; }sys_fileStat_s; |
对于sys_fileMode_s,是一个结构体。
fType是文件类型
fPermissions是文件权限
typedefstructpacked{ sys_fileType_enumfType; sys_filePermission_sfPermissions; }sys_fileMode_s; |
对于sys_fileType_enum,表示文件类型,是一个枚举类型。
typedefenumbit[3:0]{ fTypeFifo=4'h1;//Fifo文件 fTypeCharDev=4'h2;//字符设备 fTypeDir=4'h4;//目录 fTypeBlkDev=4'h6;//块设备 fTypeFile=4'h8;//普通文件 fTypeSymLink=4'hA;//链接文件 fTypeSocket=4'hC;//socket文件 }sys_fileType_enum; |
对于sys_filePermission_s,表示文件权限,是一个结构体。
typedefstructpacked{ bitsetUID; bitsetGID; bitsticky; sys_fileRWX_sowner;//属主权限 sys_fileRWX_sgroup;//属组权限 sys_fileRWX_sothers;//其他用户权限 }sys_filePermissions_s; |
其中的sys_fileRWX_s,表示rwx权限。也是一个结构体:
typedefstructpacked{ bitr;//读权限 bitw;//写权限 bitx;//执行权限 }sys_fileRWX_s; |
二、文件操作方法
1.sys_fileStat
函数原型:
functionautomaticsys_fileStat_s sys_fileStat(stringpath, bitasLink=0); |
传入两个参数:
path:文件路径
asLink:是否是链接文件
函数,返回sys_fileStat_s的结构体,这个结构体,就包含了文件的所有信息。
函数,内部实质是调用了svlib_dpi_imported_fileStat这个dpi函数。
而svlib_dpi_imported_fileStat这个c函数,其实是调用linux提供的stat,或者lstat方法获取文件的信息。
2.file_mode
functionautomaticsys_fileMode_s file_mode(stringpath, bitasLink=0); |
path:文件路径
asLink:是否是链接文件
函数,返回sys_fileMode_s的结构体,这个结构体,就包含了文件类型以及访问权限信息。
调用sys_filStat获取文件的信息,然后将信息中的mode提取返回。
至于file_mTime,file_aTime,file_cTime,file_size这几个方法,和file_mode方法中实现一致。
3.file_accessible
判断文件是否可以访问。
函数原型:
functionautomaticbit file_accessible(stringpath, sys_fileRWX_smode = 0); |
path:文件路径
mode:权限
如以下判断,文件是否有可读权限
if(file_accessible("flist",'{r:1,w:0,x:0})) $display("Ok to read file"); |
这个内部实现,其实是调用svlib_dpi_imported_access方法。
其实是调用linux的内置access函数,获取是否能够访问。
三、例子
有了svlib提供的结构体和方法,就可以对文件进行操作了。
代码如下:
执行结果:
和文件信息一致。