基础IO及文件系统

news2024/11/16 21:31:43
一、系统接口介绍
        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.coloradmin.cn/o/734712.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LinuxCP插件virtio与内核vhost

以下为LCP创建的接口对&#xff0c;VPP侧为物理接口port7&#xff0c;映射到Linux侧的为虚拟接口hostap1&#xff0c;接口hostap1作为vhost的后端存在。VPP侧接口tap1为前端的virtio接口。 vpp# show lcp itf-pair: [0] port7 tap1 hostap1 24 type tap vdp# vdp# show interf…

QT登录界面

1.效果图 2.代码 #include "widget.h" #include "ui_widget.h" #include <QApplication> #include <QWidget> #include <QtWidgets>Widget::Widget(QWidget *parent): QMainWindow(parent), ui(new Ui::Widget) {ui->setupUi(this);…

【数据结构二叉树OJ系列】5、相同的树和另一个树

目录 一、相同的树 二、另一个树的子树 一、相同的树 题述&#xff1a; 给定二叉树&#xff0c;检验他们是否相同。 如果两个树在结构上相同&#xff0c;并且节点具有相同的值&#xff0c;则认为他们是相同的。 示例1&#xff1a; 题中已给&#xff1a; struct TreeNode {i…

黑马大数据学习笔记0-环境配置

目录 设置VMware网络CentOS操作系统三台虚拟机系统配置&#xff1a;主机名、固定IP、SSH免密登录配置主机名映射配置SSH免密登录创建hadoop用户并配置免密登录JDK1.8环境部署防火墙、SELinux、时间同步设置快照 视频p3-p5 https://www.bilibili.com/video/BV1WY4y197g7?p3 设…

tomcat第1章 tomcat介绍、安装、部署项目

一、前言 我们在写javaweb程序的时候有没有考虑如果没有tomcat&#xff0c;我们怎么给客户端返回响应数据&#xff1f;既然能返回响应数据&#xff0c;为什么还要使用tomcat&#xff1f; 什么是tomcat&#xff0c;以及tomcat历史版本发展情况&#xff0c;每个版本servlet规范…

如何与ChatGPT愉快地聊天

原文链接&#xff1a;https://mp.weixin.qq.com/s/ui-O4CnT_W51_zqW4krtcQ 人工智能的发展已经走到了一个新的阶段&#xff0c;在这个阶段&#xff0c;人工智能可以像人一样与我们进行深度的文本交互。其中&#xff0c;OpenAI的ChatGPT是一个具有代表性的模型。然而&#xff0…

JavaFX学习:MVC模式中的PropertyValueFactory

PropertyValueFactory类是“TableColumn cell value factory”,绑定创建列表中的项。示例如下&#xff1a; TableColumn<Person,String> firstNameCol new TableColumn<Person,String>("First Name");firstNameCol.setCellValueFactory(new PropertyVal…

Blender基础入门(3):复杂建模技巧

文章目录 我个人的Blender专栏前言基础属性设置选择循环选择&#xff1a;Alt左键透视选择锁定物体编辑模式123快捷键按下/&#xff08;右侧Shift左边&#xff0c;<>按键右边&#xff09;&#xff0c;锁定物体先在物体模式选择物体&#xff0c;再到编辑模式就只会选择该物…

淘宝订单拉取更新历史状态~需求

&#x1f4da;目录 订单接口api需求问题解决 Map<String,TaobaoOrder> 订单接口api 可自行查询官网文档&#xff0c;点击进入 需求 通过接口中has_next 标识判断该时间断是否还有下一页数据,直到该值数据为false时,表面该时间范围内的订单数据获取完成. 拉取完成后需要对…

Maven工程开发中的继承与聚合

1. 聚合工程概念 设置一个空的maven工程&#xff0c;工程里面只有pom文件&#xff0c;另外将这个工程的打包方式设置为pom。 在聚合工程里面添加聚合工程里面管理的模块 2.聚合总结 3.继承 例如下面02工程继承上面的01工程&#xff0c;在02工程的pom文件中要配置要继承的父工…

分组统计--Pandas

1.groupby 1.1 函数功能 先对数据进行分组&#xff0c;然后在每个分组上运用聚合函数、转换函数 1.2 函数语法 DataFrame.groupby(byNone, axis0, levelNone, as_indexTrue, sortTrue, group_keysTrue, observedFalse, dropnaTrue)1.3 函数参数 参数含义by分组依据axis沿着…

【电子学会】2023年05月图形化一级 -- 找食物

找食物 1. 准备工作 &#xff08;1&#xff09;添加背景&#xff1a;Jungle&#xff1b; &#xff08;2&#xff09;删除小猫角色&#xff0c;添加角色&#xff1a;Dog2、Donut&#xff1b; 2. 功能实现 &#xff08;1&#xff09;点击绿旗&#xff0c;小狗的初始位置在舞…

打家劫舍(力扣)动态规划 JAVA

你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统会自动报警。 给定一个代表每个房屋存放金额的非…

从C语言到C++_25(树的十道OJ题)力扣:606+102+107+236+426+105+106+144+94+145

目录 606. 根据二叉树创建字符串 - 力扣&#xff08;LeetCode&#xff09; 解析代码&#xff1a; 102. 二叉树的层序遍历 - 力扣&#xff08;LeetCode&#xff09; 解析代码&#xff1a; 107. 二叉树的层序遍历 II - 力扣&#xff08;LeetCode&#xff09; 解析代码&…

倪海厦针灸大成学习笔记

学习倪海厦老师人纪针灸课程的学习笔记&#xff0c;比较粗糙&#xff0c;不一定准确&#xff0c;分享给大家&#xff0c;大家发现笔记中的错误&#xff0c;欢迎反馈&#xff01; Word文档链接 有需要的欢迎私信

VSCode控制台乱码解决

如果你试过很多方法依然解决不了乱码问题&#xff0c;不妨试试这个 设置完成后重启电脑 开机后查看一下当前的编码 打开VSCode试一下 不得不吐槽一下MS。。。。。。

虚幻引擎程序化资源生成框架PCG 之 UPCGBlueprintElement源码笔记(二)数据流

PCG节点处理的是数据流&#xff0c;也就是点云&#xff0c;点云到底是啥&#xff1f;笼统地说就是一个个携带着信息的点组成的集合。但是在具体是使用过程中&#xff0c;我们还得了解这些”携带着信息的点“是如何被层层包装起来的。本文中老王就和大家一边拆解源代码一边做实验…

以太网数据链路层相关技术(六)

目录 一、概述 二、MAC地址 2.1 概述 2.2 MAC地址的意义 三、共享介质型网络与非共享介质网络 四、VLAN技术 一、概述 在各设备之间的数据传输时&#xff0c;物理层和数据链路层是必不可少的。其中&#xff0c;物理层的通信媒介包括双绞线电缆、同轴电缆、光纤、电波以及…

Springcloud基础(4)-Ribbon负载均衡

负载均衡 1. Ribbon简单描述2. 在SpringCloud中查看相关处理源码3. ribbon的默认策略&#xff0c;懒加载3. 实操中的相关问题 1. Ribbon简单描述 Spring Cloud Ribbon 是一套基于 Netflix Ribbon 实现的客户端负载均衡和服务调用工具。Ribbon是Netflix发布的开源项目&#xff0…

MySQL第四天作业 单表查询和多表查询

单表查询 创建表 CREATE TABLE emp (empno int(4) NOT NULL,ename varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,job varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,mgr int(4) NULL DEFAULT NULL,hiredate d…