weiqi7777

svlib(3)- 文件操作

0
阅读(2806)

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函数。

clip_image002

svlib_dpi_imported_fileStat这个c函数,其实是调用linux提供的stat,或者lstat方法获取文件的信息。

clip_image004

2.file_mode

functionautomaticsys_fileMode_s file_mode(stringpath,

bitasLink=0);

path:文件路径

asLink:是否是链接文件

函数,返回sys_fileMode_s的结构体,这个结构体,就包含了文件类型以及访问权限信息。

调用sys_filStat获取文件的信息,然后将信息中的mode提取返回。

clip_image006

至于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方法。

clip_image008

其实是调用linux的内置access函数,获取是否能够访问。

clip_image010

三、例子

有了svlib提供的结构体和方法,就可以对文件进行操作了。

代码如下:

clip_image012

执行结果:

clip_image014

和文件信息一致。

clip_image016

Baidu
map