文件系统 系统调用 文件操作--摘录自野火教程

文件系统是用于管理和组织存储设备上数据的结构,如FAT32、NTFS等。它解决了直接访问物理地址存储数据的不便。查看本机文件系统可使用`df-T`命令。在C语言中,选择C库函数或系统调用进行文件操作取决于性能需求、硬件限制和对实时性的要求。系统调用可能影响性能,而库函数如fwrite通过缓冲区优化小规模写入操作。
摘要由CSDN通过智能技术生成

本文只再录部分内容,详情查看野火教程

 

1- 文件系统

1.1- 使用文件系统原因

    从EEPROM、Nor FLASH、NAND FLASH、eMMC到机械硬盘,各种各样的存储器本质就是具有多个能够 存储0和1数据单元的设备,存储内容时,程序需要直接访问这些存储单元的物理地址来保存内容。这样直接 存储数据会带来极大的不便,如难以记录有效数据的位置,难以确定存储介质的剩余空间,以及应以何 种格式来解读数据。就如同一个巨大的图书馆无人管理,杂乱无章地堆放着各种书籍,难以查找。

    为了高效地存储和管理数据,文件系统在存储介质上建立了一种组织结构,这些结构包括操作系 统引导区、目录和文件,就如同图书馆给不同类的书籍进行分类、编号,放在不同的书架上。不同的管理 理念引出了不同的文件系统标准,上述的 FAT32、 NTFS、 exFAT、ext2/3/4就是指不同类型的 标准,除此之外,还有专门针对NAND类型设备 的文件系统jffs2、yaffs2等等。

 

1.2- 查看本机上文件系统

命令: df -T

除了真正的文件系统,还有伪文件系统: sysfs、procfs、devfs等,具体参考教程

 

2- 文件操作, 如何选择c库函数和系统调用函数接口

既然C标准库和系统调用都能够操作文件,那么应该选择哪种操作呢?考虑的因素如下:

  • 使用系统调用会影响系统的性能。执行系统调用时,Linux需要从用 户态切换至内核态,执行完毕再返回用户代码,所以减少系统调用能减 少这方面的开销。如库函数写入数据的文件操作fwrite最后也是执行了write系统 调用,如果是写少量数据的话,直接执行write可能会更高效,但如果是频繁的写入操作,由于f write的缓冲区可以减少调用write的次数,这种情况下使用fwrite能更节省时间。

  • 硬件本身会限制系统调用本身每次读写数据块的大小。如针对某种存 储设备的write函数每次可能必须写4kB的数据,那么当要写入的实际数据小于4kB时,write也只能 按4kB写入,浪费了部分空间,而带缓冲区的fwrite函数面对这种情况,会尽量在满足数据长度要求时才执行系统调用,减少空间开销。

  • 也正是由于库函数带缓冲区,使得我们无法清楚地知道它何时才会真正地把内容写入到硬件上,所以在需 要对硬件进行确定的控制时,我们更倾向于执行系统调用。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值