weiqi7777

svlib(3)- 文件操作

0
阅读(2685)

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

clip_image002

 

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

clip_image004

2.      file_mode

function automatic sys_fileMode_s file_mode(string path,

bit asLink=0);

path:文件路径

asLink:是否是链接文件

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

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

clip_image006

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

clip_image008

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

clip_image010

三、            例子

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

         代码如下:

clip_image012

 

         执行结果:

clip_image014

         和文件信息一致。

clip_image016