4 system Call Development Notes
这一套例程代表应用程序中~RTEMS~文件系统为文件和目录提供的接口。
所有函数都与~POSIX~标准兼容,如果一个特定的接口已经实现。
下面的列表列出的例程是应用程序接口一部分。

  • access()
  • chdir()
  • chmod()
  • chown()
  • close()
  • closedir()
  • dup()
  • dup2()
  • fchmod()
  • fcntl()
  • fdatasync()
  • fpathconf()
  • fstat()
  • ioctl()
  • link()
  • lseek()
  • mkdir()
  • mkfifo()
  • mknod()
  • mount()
  • open()
  • opendir()
  • pathconf()
  • read()
  • readdir()
  • unmount()

下面的小将提供每一个函数与开发相关的信息。

4.1 access
FILE: access.c
文件:access.c

处理:
此函数是基于~stat()~函数的。它获取指定文件的当前状态信息,然后根据传递给这个函数的模式参数判断调用者否有能力访问该文件(读、写或执行)。

开发注释:此函数是基于~stat()~函数之上的。只要返回的结构中的~st_mode~字段遵循的标准~UNIX~惯例,这个函数不需要修改也应该支持其他文件系统。

4.2 chdir
文件:chdir.c

处理:这个函数将判断我们试图改变当前路径的路径名是否存在并且是否为一个目录。
如果这些条件满足,当前目录全局指示~(rtems_filesystem_current)~被设置为由~rtems_filesystem_evaluate_path()~函数
返回的~rtems_filesystem_location_info_t~结构定义的变量。

开发注释:此函数是基于~rtems_filesystem_evaluate_path()~函数和文件系统指定的~OP~表中的~node_type()~函数。
每个文件系统必须提供~node_type()~函数,因为它访问文件系统的节点信息,以判断该节点是以下哪种类型:

  • RTEMS_FILESYSTEM_DIRECTORY
  • RTEMS_FILESYSTEM_DEVICE
  • RTEMS_FILESYSTEM_HARD_LINK
  • RTEMS_FILESYSTEM_MEMORY_FILE

必须承认这种节点管理信息的形式可以适应各种不同的文件系统的具体实现。
RTEMS~有一个特殊结构的全局变量,维护当前的目录位置。
这个全局变量的类型是~rtems_filesystem_location_info_t,名字为~rtems_filesystem_current。
这个结构并不总是有效的。为了确定结构是有效的,你必须先测试此结构中的~node_access~字段。
如果指针为~NULL,那么这个结构并不包含有效的当前目录的指示。

4.3chmod
文件:chmod.c

处理:此函数是基于~open()、fchmod()~和~close()~函数。
只要保持~mode_t~值的标准解释不变,该函数不需要修改即可支持其他的文件系统。

开发注释:该函数首先确定可以使用读/写访问打开所选的文件。
所选相关路径允许模式的修改需要这样打开文件。
fchmod()~函数使用~open()~函数返回的整数文件指针来实际修改路径的模式。
修改模式后,会关闭被打开的文件描述符。

4.4 chown
文件:chown.c

处理:此函数是建立在~rtems_filesystem_evaluate_path()~和由文件系统的~OPS~表中指定的~chown()~函数基础上的。

开发注释:rtems_filesystem_evaluate_path()~被用于确定指定的路径是否存在。
如果从其中获取到一个~rtems_filesystem_location_info_t~结构的数据,则允许调用函数使用这个文件系统的~OPS~表。
chown()~函数在~OPS~表中有可能没有定义。
在调用~chown()~函数之前需要检查~OPS~表中的~chown()~选项是否有效(不等于~NULL)。
如果~chown()~函数在~OPS~表中定义,使用路径评估例程返回的~rtems_filesystem_location_info_t~结构类型的变量,期望的拥有者和用户组
做为参数调用该函数。

4.5close
文件:
close.c

处理:这个函数将允许将网络连接和文件系统设备关闭。
如果文件描述符与一个网络设备相关,将从先前注册的网络函数表(rtems_libio_handlers)中选出适当的网络函数进行调用。
如果文件描述符引用一个文件系统中的入口,将使用设备放置在文件控制块~(rtems_libio_t~结构)~里的信息选择合适的处理程序。

开发注释:rtems_file_descriptor_type~检查一些文件描述符索引的高位部分。
如果它发现在文件描述符索引的高比特位被设置,该设备是网络设备的引用。
网络设备的处理程序是从一个特殊的注册表~(rtems_libio_handlers)~中获取的,它是在网络初始化时设置的。
调用网络处理程序,网络处理程序的状态将被返回给调用函数。
如果在文件描述符索引的高比特位没有被设置,文件描述符引用的是一个~RTEMS~文件系统的元素。
以下执行序列将会应用于任何文件系统的文件描述:

  • 使用~rtems_libio_iop()~函数为文件描述获取~rtems_libio_t~结构;
  • 使用~rtems_libio_check_fd()~对文件描述符进行范围检查;
  • 确认是否在处理程序选择表中有一个真实的函数为文件系统和节点类型选择处理~close()~操作。
  • 这通常是为了避免执行尚未实现的函数;
  • 如果定义了该函数,调用它的时候使用文件控制块的指针作为它的参数;
  • 与打开文件描述符相关联的文件控制块被使用~rtems_libio_free()~函数标记为自由(???);
  • 关闭处理程序返回代码给调用它的程序。

4.6 closedir
文件:closedir.c

处理:这个代码从~BSD~小组获取。此例程必须清理跟踪打开目录所需要的内存资源。
该代码是基于~close()~函数和标准内存~free()~函数。
它不需要改变即支持其他文件系统。

开发注释:该例程更改文件描述符和索引成为一个目录结构,使其变为一个无效的文件描述符。
显然,即将被释放的内存在重新申请之前仍可能被引用。
dd_buf~结构的内存将在包含指向~dd_buf~区域的指针的控制结构之前被重新分配。
目录控制内存被重新分配。
close()~函数用于释放文件描述符索引。

4.7 dup() Unimplemented
File:
dup.c
Processing:
Development Comments:

4.8 dup2() Unimplemented
File:
dup2.c
Processing:
Development Comments:

4.9 fchmod
文件:fchmod.c

处理:此函数将改变一个文件系统的节点的权限。它是基于以下的函数和宏:

  • rtems_file_descriptor_type();
  • rtems_libio_iop();
  • rtems_libio_check_fd();
  • rtems_libio_check_permissions();
  • 与这个文件描述符关联的文件控制块中处理例程表所引用的~fchmod()~函数。

开发注释:
例程将尝试去检查文件描述符索引是否与网络连接相关联。
如果是,则从这个例程返回一个错误。
文件描述符索引号是用来获取相关的文件控制块。
文件描述符的值已被检查了范围。
检查文件控制块以确定是否拥有对它的写权限,让我们可改变文件的模式。
测试文件控制块所引用的处理程序表中是否包含~fchmod()~处理函数。
如果没有,将返回一个错误给调用例程。
如果~fchmod()~函数存在,程序会以文件控制块和所需的模式作为参数调用该函数。

4.10 fcntl
文件:fcntl.c

处理:
目前函数仅与文件控制块交互。如果文件控制块的结构和相关字段的含义没有改变,
在其他文件系统的实现中部分~fcntl()~的实现应保持不变。

开发注释:
已经实现的命令只有~F_SETFD~和~F_GETFD。
该命令操纵文件描述符索引相关联的文件控制块中的~flags~字段的~LIBIO_FLAGS_CLOSE_ON_EXEC~比特位。

该函数的目前实现执行的操作顺序如下:

  • 检查我们正在试图操作的文件描述符是否与网络连接相关;
  • 获取与文件描述符索引相关的文件控制块;
  • 对该文件描述符索引执行范围检查。

转载于:https://blog.51cto.com/coolbacon/1280014

RTEMS文件系统(4):系统调用开发信息(上)相关推荐

  1. RTEMS文件系统(6):内存文件系统(上)

    %6 In-Memory Filesystem 本节描述了内存文件系统~(In-Memory Filesystem,IMFS).IMFS~是一个功能齐全的在内存中保存所有信息的~POSIX~文件系统. ...

  2. 导出RK3288开发板上的根文件系统,并打包img

    整体操作一共三步: 一.将Rk3288的整个根文件系统的文件,通过ssh拷贝到PC系统(Ubuntu): 二.将此拷贝的全部文件,加载到虚拟光盘中,制作成img文件: 三.将img文件,再烧回RK32 ...

  3. 【Android 系统开发】 编译 Android文件系统 u-boot 内核 并烧写到 OK-6410A 开发板上

    博客地址 : http://blog.csdn.net/shulianghan/article/details/40299813  本篇文章中用到的工具源码下载 : -- ok-6410A 附带的 A ...

  4. 嵌入式Linux开发板上NFS文件系统的使用【ZT】

    本文转载于http://www.dz863.com/RTOS/Embedded-linux/Linux-NFS.htm 本文描述了在开发嵌入式linux系统时调试程序的一个方法,本文以深圳远峰的YF2 ...

  5. 导出开发板上的根文件系统,并打包制成img镜像

    具体流程分为三步走: 第一:将开发板RK3588的整个根文件系统的文件,通过ssh拷贝到PC系统(Ubuntu): 第二:将此拷贝的全部文件,加载到虚拟光盘中,制作成img文件: 第三:将img文件, ...

  6. 详细讲解 移植Uboot到ARMer9开发系统上

    首先了解ARMer9开发系统硬件设计上和三星原装SMDK2410之间的区别.让uboot在ARMer9开发系统上跑起来,目前只需要关注如下的硬件区别,解决了下面这个问题,uboot就可以在ARMer9 ...

  7. Windows 文件系统过滤驱动开发教程 (第二版)

    Windows 文件系统过滤驱动开发教程 (第二版)       楚狂人-2007-上海 (MSN:walled_river@hotmail.com)          -1.  改版序....... ...

  8. Windows文件系统过滤驱动开发教程(0,1,2)

    0. 作者,楚狂人自述 我长期网上为各位项目经理充当"技术实现者"的角色.我感觉Windows文件系统驱动的开发能找到的资料比较少.为了让技术经验不至于遗忘和引起大家交流的兴趣我以 ...

  9. Windows文件系统过滤驱动开发教程(4,5)

    4.设备栈,过滤,文件系统的感知 前边都在介绍文件系统驱动的结构,却还没讲到我们的过滤驱动如何能捕获所有发给文件系统驱动的irp,让我们自己来处理?前面已经解释过了设备对象.现在来解释一下设备栈. 任 ...

最新文章

  1. 如何使用批处理添加网络打印机
  2. oracle死锁视频教程,两个Oracle死锁解决实例
  3. Java新特性:数据类型可以扔掉了?
  4. C#中其他简单LINQ查询表达式的简单使用介绍
  5. 将java.util.Date类型转换成json时,使用JsonValueProcessor将date转换成希望的类型
  6. zabbix 3.2.1 安装 graphtree3.0.4 或 graphtree3.2.x
  7. 高可用服务 AHAS 在消息队列 MQ 削峰填谷场景下的应用...
  8. delphi连接sql server的字符串2011-10-11 16:07
  9. 专访 Unity 高管:深耕游戏、VR/AR,致力为开发者提供极致体验
  10. 如何通过 SSH 连接到 Docker 容器
  11. 计算机 海底世界 教案,海底世界教学反思?海底世界儿童画?鱼鱼桌面海底世界...
  12. VirusTotal智能搜索安卓样本示例
  13. Min Difference
  14. 阿里云CDN边缘图像处理功能内测
  15. PartⅠIn the Hotel 在宾馆!?
  16. 3Dmax建模教程详细步骤3D建模速成入门到高级教程
  17. NUnit2.0详细使用方法 选择自 cyp403 的 Blog
  18. 美颜sdk常用功能的实现原理
  19. 天圆地方· 围棋界的盲棋天才 -- 鲍云
  20. dell刷sn_戴尔笔记本怎么查询sn码

热门文章

  1. 深度丨当AI遇见区块链,2018年的第一场火,还是第一场泡沫?
  2. CCF的A类期刊和会议有哪些?人工智能顶会ACL,ICML,NeurIPS,ICLR论文投稿时间以及影响因子等
  3. 警方建立了一个人工智能来预测暴力犯罪,它有严重缺陷
  4. 2020年虚拟现实和增强现实的发展趋势将会如何|0glasses低调分享
  5. 美陆军将在2020年军演中测试人工智能新应用
  6. 重磅!2019年诺贝尔生理学或医学奖揭晓,“细胞感知氧气通路”摘得桂冠
  7. 终于看见光的速度了:每秒一万亿帧的相机,拍摄到光的运行状态!
  8. 徐匡迪、潘云鹤等纷纷撰文,关于人工智能的最新判断都在这里了
  9. 全球 35 大开源公司都在这里!
  10. 谷歌、亚马逊、微软、IBM…这些巨头都已如何通过AI赚到钱了?