基础IO及文件系统

news/2024/11/19 12:21:47/
一、系统接口介绍
        1. open()命令 模式下:ctrl+v进入visual block模式,然后选择J、K,然后输入大写i,然后输入//,最后按ESC,即可完成批量注释,按u取消。ctrl + v 进入块选择模式,选中你要删除的行首的注释符号,注意//要选中两个,选好之后按d即可删除注释。
                
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
pathname: 要打开或创建的目标文件
flags: 打开文件时,可以传入多个参数选项,用下面的一个或者多个常量进行“或”运算,构成flags。
参数:
O_RDONLY: 只读打开
O_WRONLY: 只写打开
O_RDWR : 读,写打开
这三个常量,必须指定一个且只能指定一个
O_CREAT : 若文件不存在,则创建它。需要使用mode选项,来指明新文件的访问权限
O_APPEND: 追加写
返回值:成功:新打开的文件描述符失败:-1
mode_t理解:直接 man手册,比什么都清楚。
open 函数具体使用哪个,和具体应用场景相关,如目标文件不存在,需要open创建,则第三个参数表示创建文件的默认权限,否则,使用两个参数的open。

二、文件描述符

        1.文件描述符表

        对Linux进程来讲,每个打开的文件都是通过文件描述符(File Descriptor)来标识的,内核为每个进程维护了一个文件描述符表,这个表以FD为索引,再进一步指向文件的详细信息。在进程创建时,内核为进程默认创建了0、1、2三个特殊的FD,这就是STDIN、STDOUT和STDERR,如下图所示意:

        2.文件描述符的分配规则 

        一个文件被创建成功后,他的返回值表示在文件描述符表中的位置,是从最小的位置开始存放文件地址的。

        3.重定向原理

        是让已创建的FD指向其他文件。比如,下面是对STDOUT重定向到testfile.txt前后内核文件描述符表变化的示意图:

        4.重定向函数---dup2()的系统调用

        函数原型:int dup2(int oldfd,   int newfd);意为将要赋值的文件地址(old),赋值到被赋值的文件描述表中(new),然后关闭被复制的文件描述符。dup()系列函数主要是为重定向使用的。

        5.输入、输出、错误重定向

        6.多态的理解,通过OS系统中file结构中的函数指针来调动驱动中的对应的读写方法

 三、缓冲区

        缓冲区本质上就是一段内存,专门用来做缓存的一块空间,不在磁盘上、不在显示器上、不在网络里。进程为了节省访问IO的时间,通常将数据拷贝到缓冲区中,然后由缓冲区与磁盘进行数据交换。

四、文件系统

        4.1 磁盘的物理结构

             扇区:磁道与磁道之间的区域,一个扇区512字节,沿径向向外扇区面积变大,但数据总量不变,所以越靠近中心的位置,扇区面积越小,数据密度越大。

             磁道:盘面上一圈一圈的同心圆,磁头沿径向运动,则可以读出所处磁道位置。

             柱面:上下同直径的磁道形成的面。

             磁头:磁头个数等于面数,同时上下磁头是共同进退的。

             所以对于多盘面的结构,它的定位方式为:先确定磁道(柱面),再确定磁头(磁头与磁道都有编号的),最后确定扇区。所以磁盘中定义任意一个扇区,采用的硬件基本定位方式:CHS定位法。

        4.2 磁盘的逻辑结构

              4.2.1 磁盘的抽象化

              4.2.2 LBA地址与扇区位置的转换

         已知磁盘有6个盘面,7个磁道,1个磁道有120个扇区,数据的LBA为123,求该数据在磁盘中的具体位置。先确定盘面,再确定磁道数,最后确定扇区

        123 / (7*120) = 0;含义为:LBA除以一个盘面的总扇区数,确定在哪个盘。有比0大的余数,余1则说明在第二个盘,余2说明在第三个盘。这里为0,说明在第1个盘。

        123 / 120 = 1; 含义为:LBA除以一个磁道的总扇区数,确定在哪个磁道。

        123 % 120 = 23  含义为:在第一个磁道的第23的位置。   

               4.2.3 


http://www.ppmy.cn/news/803692.html

相关文章

Element-案例-脚本页面布局

案例需求&#xff1a; 根据页面原型完成员工管理页面开发&#xff0c;并通过Axios完成数据异步加载 步骤 创建页面&#xff0c;完成页面的总体布局规划布局中各个组件的实现列表数据的异步加载&#xff0c;并渲染展示 1.创建页面&#xff0c;完成页面的总体布局规划 分析案…

惠普打印机故障代码_HP打印机故障代码

本章列出了打印机控制面板信息并解释了它们的含义。控制面板显示四种类型的信息。这些信息类型是&#xff1a;  状态信息  警告信息  注意信息  严重错误信息 信息类型 状态信息 状态信息反映了打印机的当前状态。它们提示用户打印机操作正常&#xff0c;无需用户交互来…

HP打印机连不上解决办法

1.出现这种问题大部分跟驱动相关&#xff0c;重新下载安装驱动即可 2.来到打印机wifi网址 3.点击手册/驱动程序&#xff0c;选择这个 4.选择驱动&#xff0c;download下载 5.运行exe程序&#xff0c;连接打印机。安装驱动&#xff0c;一直下一步&#xff0c;打印测试页即可。…

ASPICE汽车软件能力如何评估

第一节我们介绍了&#xff1a;什么是ASPICE 上一节我们介绍了&#xff1a;什么是aspice认证 这一节我们看一看&#xff1a;ASPICE汽车软件能力是如何评估 为了使汽车电控系统的研发具有统一的流程和规范的标准&#xff0c;并且使整个开发进度具有可控性和可预测阻借用具有国际…

VALSE 20200415 | 机器学习 vs 压缩感知:核磁共振成像与重建

【Talk】VALSE 20200415 | 机器学习 vs 压缩感知&#xff1a;核磁共振成像与重建 文章目录 【Talk】VALSE 20200415 | 机器学习 vs 压缩感知&#xff1a;核磁共振成像与重建Deep learning for MR imaging and analysis - Shanshan WangMachine Learning for CS MRI: From Model…

S3C2440实现dm9000网卡驱动程序移植

20150419 S3C2440实现dm9000网卡驱动程序移植 2015-04-19 Lover雪儿 首先附上厂家提供的完整的dm9000程序&#xff1a; 1 /*2 3 dm9ks.c: Version 2.08 2007/02/12 4 5 A Davicom DM9000/DM9010 ISA NIC fast Ethernet driver for Linux.6 7 This program is…

Android S5PV210 fimc驱动分析 - fimc_capture.c

转自&#xff1a;http://write.blog.csdn.net/postedit fimc_capture.c在FIMC系统中的位置&#xff0c;网上偷来的一幅图片 [cpp] view plain copy 43 static const struct v4l2_fmtdesc capture_fmts[] { 44 { 45 .index 0, 46 .type …

【构建ML驱动的应用程序】第 4 章 :获取初始数据集

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…