svlib(3)- 文件操作
0赞svlib提供了对文件操作的相关函数。
一、 文件结构体
对于文件,svlib提供了一个结构体sys_fileStat_s,来管理文件的属性。
typedef struct { longint mtime; //修改时间 longint atime; //访问时间 longint ctime; //创建时间 longint size; //大小 int unsigned uid; int unsigned gid; sys_fileMode_s mode; }sys_fileStat_s; |
对于sys_fileMode_s,是一个结构体。
fType是文件类型
fPermissions是文件权限
typedef struct packed { sys_fileType_enum fType; sys_filePermission_s fPermissions; } sys_fileMode_s; |
对于sys_fileType_enum,表示文件类型,是一个枚举类型。
typedef enum bit[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,表示文件权限,是一个结构体。
typedef struct packed { bit setUID; bit setGID; bit sticky; sys_fileRWX_s owner; //属主权限 sys_fileRWX_s group; //属组权限 sys_fileRWX_s others; //其他用户权限 } sys_filePermissions_s; |
其中的sys_fileRWX_s,表示rwx权限。也是一个结构体:
typedef struct packed { bit r; //读权限 bit w; //写权限 bit x; //执行权限 }sys_fileRWX_s ; |
二、 文件操作方法
1. sys_fileStat
函数原型:
function automatic sys_fileStat_s sys_fileStat(string path, bit asLink=0); |
传入两个参数:
path:文件路径
asLink:是否是链接文件
函数,返回sys_fileStat_s的结构体,这个结构体,就包含了文件的所有信息。
函数,内部实质是调用了svlib_dpi_imported_fileStat这个dpi函数。
而svlib_dpi_imported_fileStat这个c函数,其实是调用linux提供的stat,或者lstat方法获取文件的信息。
2. file_mode
function automatic sys_fileMode_s file_mode(string path, bit asLink=0); |
path:文件路径
asLink:是否是链接文件
函数,返回sys_fileMode_s的结构体,这个结构体,就包含了文件类型以及访问权限信息。
调用sys_filStat获取文件的信息,然后将信息中的mode提取返回。
至于file_mTime,file_aTime,file_cTime,file_size这几个方法,和file_mode方法中实现一致。
3. file_accessible
判断文件是否可以访问。
函数原型:
function automatic bit file_accessible (string path, sys_fileRWX_s mode = 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提供的结构体和方法,就可以对文件进行操作了。
代码如下:
执行结果:
和文件信息一致。