基础IO及文件系统

一、系统接口介绍
        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.hqwc.cn/news/15250.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安装ps显示找不到MSVCP140.dll,三个修复方法可解决

在安装photoshop软件的时候&#xff0c;电脑报错“安装ps显示找不到MSVCP140.dll&#xff0c;无法继续执行此代码”&#xff0c;这个是由于Windows系统中的MSVCP140.dll文件丢失或者损坏&#xff0c;MSVCP140.dll是一种动态链接库文件&#xff0c;它是由Microsoft Visual C的编…

阿里云轻量服务器和ecs区别(最新更新)

阿里云服务器ECS和轻量应用服务器有什么区别&#xff1f;云服务器ECS是明星级云服务器&#xff0c;轻量应用服务器可以理解为简化版的云服务器ECS&#xff0c;轻量适用于单机应用&#xff0c;云服务器ECS适用于集群类高可用高容灾应用&#xff0c;阿里云百科来详细说下阿里云轻…

STM32网络通信Web Server中SSI和CGI的应用

介绍 最近由于项目功能需要&#xff0c;开始研究STM32 WebServer通信以及SSI和CGI应用方法。项目结束后&#xff0c;主要总结浏览器与STM32之间进行通行&#xff0c;STM32作为服务器而浏览器做为客户端进行通行。 文件介绍 此部分的代码是根据ST官方的Web Server例程的基础上…

微服务的划分姿势分享

微服务是一种理念&#xff0c;没有确切的定义和边界&#xff0c;好比设计原则&#xff0c;是属于抽象的概念。在定义不明确的情况下谈划分也是一种各说各话&#xff0c;具体问题需要具体分析。 微服务的划分矛盾在于粒度&#xff0c;如果粒度太大了&#xff0c;分和不分似乎都差…

ActiveMQ消息中间件应用场景

一、ActiveMQ简介 ActiveMQ是Apache出品&#xff0c;最流行的&#xff0c;能力强劲的开源消息总线。ActiveMQ是一个完全支持JMS1.1和J2EE1.4规范的JMS Provide实现。尽管JMS规范出台已经是很久的事情了&#xff0c;但是JMS在当今的J2EE应用中仍然扮演这特殊的地位。 二、Active…

Sublime Text,灵感犹如星辰,点亮创作之路

目录 引言Sublime Text的优点Sublime Text的缺点总结 Sublime Text 官方网站 引言 在这个快速发展的数字时代&#xff0c;创作者们面临着越来越多的选择&#xff0c;以提高他们的生产力和工作效率。而在众多的编辑软件中&#xff0c; Sublime Text 独树一帜&#xff0c;被誉为创…

Leetcode-每日一题【21.合并两个有序链表】

题目 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4]输出&#xff1a;[1,1,2,3,4,4] 示例 2&#xff1a; 输入&#xff1a;l1 [], l2 []输出&#xff1a;…

Golang指针

最近在学习底层知识&#xff0c;一直在说&#xff0c;值类型&#xff0c;引用类型&#xff0c;指针类型&#xff0c;指针&#xff0c;指针变量&#xff0c;搞的迷迷糊糊的&#xff0c;感觉也是似懂非懂&#xff0c;现在系统的学习归纳整理一下。 a : 10 a是一个值类型的变量&a…

【MySQL】内置函数详解

【MySQL】内置函数详解 日期函数字符串函数数学函数加密函数与其它 日期函数 --获取当前日期 mysql> select current_date(); ---------------- | current_date() | ---------------- | 2023-07-09 | ---------------- --获取当前时间 mysql> select current_time();…

github搜索技巧笔记

一、了解 GitHub Watch按钮 Watch可以理解为关注的意思&#xff0c;默认情况下是Not watching&#xff0c;当选择Watch后&#xff0c;你会收到这个GitHub项目的所有动态。比如&#xff1a;有人发起pull request或者issue等。接收动态方式包括个人通知中心或者邮箱。 如果某个…

wincc项目中VBS脚本密码的研究

文章目录 前言一、分析二、验证及使用 前言 很多时候我们在wincc中写全局脚本时会为自己的脚本添加密码&#xff0c;但很久很久以后再想修改密码忘记了怎么办呢。 一、分析 经过分析v7.0,v7.3,v7.5密码稍有不同&#xff0c;但同样最多可以设置21位的密码。 二、验证及使用

Nginx+Tomcat负载均衡(反向代理)、动静分离集群

NginxTomcat负载均衡、动静分离 一、正向代理与反向代理二、负载均衡--with-stream #启用 stream模块&#xff0c;提供4层调度 一、正向代理与反向代理 Nginx:正向代理&#xff08;知道目标服务器&#xff09; 反向代理&#xff08;不知道目标服务器&#xff09; Nginx配置反…