RTEMS文件系统(5):文件系统实现需求(下)

翻译 2011年01月13日 23:23:00

5.4 Operation Tables
文件系统的具体操作是被间接调用地。这些由文件系统实现的函数被配置为两个表。
文件系统处理程序表含有的针对具体文件系统的函数,与实际文件类型无关。
文件处理程序例程表含有文件系统和文件类型两种函数。

5.4.1 Filesystem Handler Table Functions
OPS~表函数被定义成一个~rtems_filesystem_operations_table~结构类型。
这定义的函数是针对一个给定的文件系统。
一个表存在于每个~RTEMS~配置支持的文件系统。
该结构定义如下,并介绍这个函数管理结构中的每个函数相关的开发信息。


    typedef struct {
        rtems_filesystem_evalpath_t     evalpath;
        rtems_filesystem_evalmake_t     evalformake;
        rtems_filesystem_link_t         link;
        rtems_filesystem_unlink_t       unlink;
        rtems_filesystem_node_type_t    node_type;
        rtems_filesystem_mknod_t        mknod;
        rtems_filesystem_rmnod_t        rmnod;
        rtems_filesystem_chown_t        chown;
        rtems_filesystem_freenode_t     freenod;
        rtems_filesystem_mount_t        mount;
        rtems_filesystem_fsmount_me_t   fsmount_me;
        rtems_filesystem_unmount_t      unmount;
        rtems_filesystem_fsunmount_me_t fsunmount_me;
        rtems_filesystem_utime_t        utime;
        rtems_filesystem_evaluate_link_t eval_link;
        rtems_filesystem_symlink_t      symlink;
    } rtems_filesystem_operations_table;

 

5.4.1.1 evalpath Handler
evalpath~处理程序与结构中对应的字段:evalpath;

参数:

    const char *pathname, /* IN */
    int flags, /* IN */
    rtems_filesystem_location_info_t *pathloc /* IN & OUT */


描述:
通过传递标志和有效的~rthems_filesystem_location_info_t~变量给这个函数,评估指定的路径名。
此外,为了识别路径的节点,它必须对~pathloc~变量做出必要的修改。
这包括为一个挂载的文件系统调用~evalpath,如果给定的文件系统支持~mount~命令。
如果评估成功,这个函数返回~0。否则,返回~-1~并在~errno~中设置相应的错误。
此例程是必需的,不应设置为~NULL。

5.4.1.2 evalformake Handler
evalformake~处理程序与结构中对应的字段是:evalformake;参数:

    const char *path, /* IN */
    rtems_filesystem_location_info_t *pathloc, /* IN & OUT */
    const char **name /* OUT */


描述:
该方法用来对一个路径评估,验证开始位置。
它负责为一个请求的~make~命令寻找父节点,设置识别的父节点的~pathloc~信息,并设置名称指针指向新节点名称的第一个字符。
此外,如果文件系统的支持~mount~命令,这个方法应为挂载文件系统调用~evalformake~函数。
如果评估成功,这函数返回~0。
否则,返回~-1~并在~errno~设置相应的错误。
此例程是必需的,不应设置为~NULL。
但是,如果文件系统不支持用户创建一个新的节点,它可以设置~errno~为~ENOSYS~并返回~-1。


5.4.1.3 link Handler
link~函数与结构中对应的字段是:link;参数:

    rtems_filesystem_location_info_t *to_loc, /* IN */
    rtems_filesystem_location_info_t *parent_loc, /* IN */
    const char *token /* IN */

描述:
这个函数用来创建一个硬链接。
它首先检查我们试图创建硬链接节点的~st_nlink~计数。如果链接数超过~LINK_MAX,将返回一个错误。
链接的名称将被标准化,移除名称尾部的外来分隔符。
这个函数不是必要的,可以设置成~NULL。

%5.4.1.4 unlink Handler
%Corresponding Structure Element:
%XXX
%Arguments:
%XXX
%Description:
%XXX

%5.4.1.5 node type Handler
%Corresponding Structure Element:
%node type()
%Arguments:
%rtems_filesystem_location_info_t *pathloc /* IN */
%Description:
%XXX

%5.4.1.6 mknod Handler
%Corresponding Structure Element:
%mknod()
%Arguments:
%const char *token, /* IN */
%mode_t mode, /* IN */
%dev_t dev, /* IN */
%rtems_filesystem_location_info_t *pathloc /* IN/OUT */
%Description:
%XXX

%5.4.1.7 rmnod Handler
%Corresponding Structure Element:
%XXX
%Arguments:
%XXX
%Description:
%XXX

%5.4.1.8 chown Handler
%Corresponding Structure Element:
%chown()
%Arguments:
%rtems_filesystem_location_info_t *pathloc /* IN */
%uid_t owner /* IN */
%gid_t group /* IN */
%Description:
%XXX

5.4.1.9 freenod Handler
freenod~函数与结构中对应的字段是:freenod。
参数:

    rtems_filesystem_location_info_t *pathloc /* IN */


描述:通用代码允许在评估函数中申请内存,当通用代码访问一个节点结束后可通过该函数释放节点内存。
如果评估函数申请内存用于识别一个节点,这个函数应该用来释放该节点的内存。
这个函数不是必需的,可以设置为NULL。

%5.4.1.10 mount Handler
%Corresponding Structure Element:
%mount()
%Arguments:
%rtems_filesystem_mount_table_entry_t *mt_entry
%Description:
%XXX

5.4.1.11 fsmount me Handler
fsmount_me~函数对应与结构中的字段是:fsmount_me。
参数:

    rtems_filesystem_mount_table_entry_t *mt_entry


描述:
此函数是由文件系统提供,用于在~RTEMS~环境下挂载文件系统时处理这个文件系统内部管理细节。
该函数不负责包含挂载点的文件系统的挂载细节。

rtems_filesystem_mount_table_entry_t~结构包含的关键字段如下:

    rtems_filesystem_location_info_t *mt_point_node,


此结构包含与挂载点相关的信息。
这允许我们可找到与含有挂载点的文件系统相关的~OPS~表和处理函数。


    rtems_filesystem_location_info_t *fs_root_node,

此结构包含与被挂载文件系统根节点相关的信息。
这允许我们可找到与被挂载文件系统相关的~OPS~表和处理函数。


    rtems_filesystem_options_t options,

控制访问方式,只读或读/写访问。


    void *fs_info,


它是一个已分配内存块的指针,用于保存任何文件系统的具有全局属性的特定信息。
这个分配区域非常重要,因为它可以让我们不止一次在~RTEMS~系统下挂载相同的文件系统类型。
每个挂载文件系统的实例有其自己的一套全局性的管理信息,与其他被挂载文件系统类型的实例相关的全局管理信息是分开的。


    rtems_filesystem_limits_and_options_t pathconf_info,


该表包含了下列与已挂载文件系统相关的值:

  •  link_max
  •  max_canon
  •  max_input
  •  name_max
  •  path_max
  •  pipe_buf
  •  posix_async_io
  •  posix_chown_restrictions
  •  posix_no_trunc
  •  posix_prio_io
  •  posix_sync_io
  •  posix_vdisable



这些值可以通过~pathconf()~和~fpathconf()~函数访问。


    const char *dev


为了包含一个字符串,用于标识包含文件系统信息的设备。
在当前实现的文件系统是基于内存的,并不需要设备的详细信息。

如果~mt_point_node.node_access~为~NULL,那么我们安装基本文件系统。
该函数将创建一个~IMFS~文件系统的根目录节点。
该节点对于所有者、组和其他组将有读、写和执行权限。
该节点名称将是一个空字符串。
为~IMFS~文件系统分配并初始化一个文件系统的信息结构~(fs_info)。
在挂载表项中的~fs_info~指针将被设置为指向文件系统的信息结构。

挂载表中的~pathconf_info~字段将被设置成相应的配置常数路径~(LIMITS_AND_OPTIONS)~的表(???)。

fs_root_node~结构按照以下步骤进行填充:

  1.  指针指向文件系统分配的根节点;
  2.  填充~IMFS~文件系统的目录节点处理程序;
  3.  填充~IMFS~的~OPS~表函数。



如果成功,返回~0~给调用该函数的任务,否则返回~1。

%5.4.1.12 unmount Handler
%Corresponding Structure Element:
%XXX
%Arguments:
%XXX
%Description:
%XXX

%5.4.1.13 fsunmount me Handler
%Corresponding Structure Element:
%imfs fsunmount me()
%Arguments:
%rtems_filesystem_mount_table_entry_t *mt_entry
%Description:
%XXX

%5.4.1.14 utime Handler
%Corresponding Structure Element:
%XXX
%Arguments:
%XXX
%Description:
%XXX

%5.4.1.15 eval link Handler
%Corresponding Structure Element:
%XXX
%Arguments:
%XXX
%Description:
%XXX

%5.4.1.16 symlink Handler
%Corresponding Structure Element:
%XXX
%Arguments:
%XXX
%Description:
%XXX

5.4.2 File Handler Table Functions
rtems_filesystem_file_handlers_r~结构类型定义了处理程序表函数。
它定义了给定的文件系统中节点类型的函数。
每个文件系统的节点类型都对应着一个表。
该结构定义如下。紧接着将列出与文件相关的在这个函数管理结构中的每个函数的开发信息。


    typedef struct {
        rtems_filesystem_open_t         open;
        rtems_filesystem_close_t        close;
        rtems_filesystem_read_t         read;
        rtems_filesystem_write_t        write;
        rtems_filesystem_ioctl_t        ioctl;
        rtems_filesystem_lseek_t        lseek;
        rtems_filesystem_fstat_t        fstat;
        rtems_filesystem_fchmod_t       fchmod;
        rtems_filesystem_ftruncate_t    ftruncate;
        rtems_filesystem_fpathconf_t    fpathconf;
        rtems_filesystem_fsync_t        fsync;
        rtems_filesystem_fdatasync_t    fdatasync;
        rtems_filesystem_fcntl_t        fcntl;
    } rtems_filesystem_file_handlers_r;



%5.4.2.1 open Handler
%Corresponding Structure Element:
%open()
%Arguments:
%rtems_libio_t *iop,
%const char *pathname,
%unsigned32 flag,
%unsigned32 mode
%Description:
%XXX

%5.4.2.2 close Handler
%Corresponding Structure Element:
%close()
%Arguments:
%rtems_libio_t *iop
%Description:
%XXX
%NOTES:
%XXX

%5.4.2.3 read Handler
%Corresponding Structure Element:
%read()
%Arguments:
%rtems_libio_t *iop,
%void *buffer,
%unsigned32 count
%Description:
%XXX
%NOTES:
%XXX

%5.4.2.4 write Handler
%Corresponding Structure Element:
%XXX
%Arguments:
%XXX
%Description:
%XXX
%NOTES:
%XXX

%5.4.2.5 ioctl Handler
%Corresponding Structure Element:
%XXX
%Arguments:
%rtems_libio_t *iop,
%unsigned32 command,
%void *buffer
%Description:
%XXX
%NOTES:
%XXX

%5.4.2.6 lseek Handler
%Corresponding Structure Element:
%lseek()
%Arguments:
%rtems_libio_t *iop,
%off_t offset,
%int whence
%Description:
%XXX
%NOTES:
%XXX

5.4.2.7 fstat handler
fstat()~函数对应结构中的字段是~fstat。参数:

    rtems_filesystem_location_info_t *loc,
    struct stat *buf


说明:
以下信息是从文件系统特定的节点中提取地,并放置在~stat~结构中:

  •  st_mode
  •  st_nlink
  •  st_ino
  •  st_uid
  •  st_gid
  •  st_atime
  •  st_mtime
  •  st_ctime




注意:
stat()~和~lstat()~服务都是直接使用~fstat()~处理程序直接实现的。
行为上的差异是由特殊文件实体调用该函数之前如何评估此路径决定。
fstat()~系统调用的实现直接由该文件系统处理函数实现。

%5.4.2.8 fchmod Handler
%Corresponding Structure Element:
%fchmod()
%Arguments:
%rtems_libio_t *iop
%mode_t mode
%Description:
%XXX
%NOTES:
%XXX

%5.4.2.9 ftruncate Handler
%Corresponding Structure Element:
%XXX
%Arguments:
%XXX
%Description:
%XXX
%NOTES:
%XXX

%5.4.2.10 fpathconf Handler
%Corresponding Structure Element:
%XXX
%Arguments:
%XXX
%Description:
%XXX
%NOTES:
%XXX

%5.4.2.11 fsync Handler
%Corresponding Structure Element:
%XXX
%Arguments:
%XXX
%Description:
%XXX
%NOTES:
%XXX

%5.4.2.12 fdatasync Handler
%Corresponding Structure Element:
%XXX
%Arguments:
%XXX
%Description:
%XXX
%NOTES:
%XXX

%5.4.2.13 fcntl Handler
%Corresponding Structure Element:
%XXX
%Arguments:
%XXX
%Description:
%XXX
%NOTES:
%XXX

操作系统实验四——文件系统的简单命令的设计与实现

要求: 实现文件系统的简单命令,此篇文件实现命令:cp。cp 是copy的缩写,使用格式为cp srcname dstname; 说明:此文件系统使用c++实现,我们要实现cp命令,大概分这几步:...
  • dzn9966
  • dzn9966
  • 2014年12月17日 23:04
  • 1147

RTEMS 文件系统设计指南

RTEMS 文件系统设计指南 filesystem.RTEMS文件系统设计指南.双语.V20131224.pdf RTEMS 的filesystem文档的原创翻译。 目录 前言 15 1 路径名...
  • zhumaill
  • zhumaill
  • 2014年03月10日 21:16
  • 956

rtems开发注意事项

1.无内存保护: 对于x86体系架构和其他cpu架构,rtems没有采用虚拟内存管理,也没用分段保护机制,所以rtems是没有提供内存保护机制,这样的好处在于实现简单,当然也存在很大的安全问题,应用...
  • hahachenchen789
  • hahachenchen789
  • 2016年09月27日 13:03
  • 1432

【Linux操作系统】Red Hat中的文件

《Linux兵书》读书笔记&1文件分类Red Hat中将文件分为5类 普通文件:具体的文件,不包含文件系统结构信息的文件。如,图形文件、数据文件、文档文件、声音文件等。可细分为文本文件和二进制文件 目...
  • zgljl2012
  • zgljl2012
  • 2015年05月27日 12:59
  • 1042

Ubuntu硬盘分区/格式化/挂载文件系统各种应用

硬盘上有些什么、文件们都有多大,在有些时候我们是需要关心的,所以这里简单介绍两个命令:df、du。一个Ubuntu硬盘可以划分4个区,3个主要分区,一个扩展分区,而扩展分区里可以划分n个逻辑分区,扩展...
  • u014313623
  • u014313623
  • 2014年04月14日 23:26
  • 1157

Windows文件系统

文件操作 1 windows卷 2 windows目录 3 windows文件 4 windows磁盘文件遍历
  • u013507368
  • u013507368
  • 2014年12月08日 09:33
  • 2065

Linux之文件系统和根文件系统

在学习Linux的过程中,会遇到“文件系统”和“根文件系统”两个概念,这两个概念容易混淆,总觉得为什么Linux需要这么多的文件系统,这两种系统的各自作用是什么,有什么区别呢?     “尽管内核是...
  • u012351051
  • u012351051
  • 2015年06月30日 13:56
  • 1388

基于stm32f103zet6的FAT16文件系统学习1(初识FAT16)

有了之前读写block的基础之后,准备弄个文件系统,之前没有接触过这东西,所以有很多都晕晕的,但是看到fat的源代码之后还是挺有信心的,因为之前一直过uboot,所以这个文件当然是小巫见大巫了。首先来...
  • King_BingGe
  • King_BingGe
  • 2013年04月05日 14:59
  • 2754

文件系统的类型简介

文件系统的类型简介 Linux支持多种文件系统类型,包括ext2、ext3、vfat、jffs、romfs和nfs等,为了对各类文件系统进行统一管理,Linux引入了虚拟文件系统VFS(Vi...
  • u013937069
  • u013937069
  • 2016年04月15日 17:43
  • 1609

Linux 文件系统与设备文件系统 (二)—— sysfs 文件系统与Linux设备模型

提到 sysfs 文件系统 ,必须先需要了解的是Linux设备模型,什么事Linux设备模型呢? 一、Linux 设备模型 1、设备模型概述      从2.6版本开始,Linux开发团队便为内核建立...
  • zqixiao_09
  • zqixiao_09
  • 2016年03月12日 12:19
  • 2628
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:RTEMS文件系统(5):文件系统实现需求(下)
举报原因:
原因补充:

(最多只允许输入30个字)