Linux 基础IO(1)内存文件

文章目录

      • 铺垫
      • 文件的系统调用接口
      • 文件描述符
      • 缓冲区

铺垫

  1. 文件=文件内容 + 文件属性
  2. 访问文件之前,都要先打开文件,而要访问,修改,编辑文件,文件就必须加载到内存中
  3. 程序运行起来变成进程,被CPU调度,打开文件
  4. 文件分为内存文件和磁盘文件。内存文件:一个文件在被进程访问
  5. 一定时间段内,系统中存在多个进程,也可能同时存在更多的被打开的文件,所以操作系统要对打开的文件进行管理:先描述,在组织。所以操作系统中一定要有描述被打开文件的结构体。

所以进程和文件一定是密切相关的。

文件的系统调用接口

我们知道,操作系统要对软硬件资源做管理,所以要想访问文件,不能直接操作,必须调用系统调用。

在这里插入图片描述
在这里插入图片描述
filename:要打开的文件名
flags:打开文件时可以传入多个参数选项,用一个或多个参数进行或运算
参数:
O_WRONLY:只写打开
O_RDONLY:只读打开
O_RDER:读写打开
O_CREAT:如果文件不存在就创建
O_TRUNC:打开文件时清空文件内容
O_APPEND:追加写
mode:创建文件时的权限

所以fopen中,
w = O_CREAT | O_WRONLY | O_TRUNC
a = O_CREAT | O_WRONLY | O_APPEND
r = O_RDONLY
open系统调用成功时返回新打开的文件描述符,失败返回-1
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
同样的,其他系统调用都会用到文件描述符fd

文件描述符

在这里插入图片描述
在这里插入图片描述
创建一批文件,发现文件描述符从3开始不断递增,那么0,1,2呢?
Linux进程默认情况下会右3个缺省打开的文件描述符,分别是标准输入0,标准输出1,标准错误2。
所以文件描述符就是从0开始的整数,文件描述符的分配规则:找到从0开始的最小的没有被使用的整数作为新的文件描述符。当我们打开文件时,操作系统要创建出对应的内核数据结构管理文件,于是就有了file结构体,表示一个被打开文件。进程执行open系统调用,就必须让进程和文件关联起来,每个进程都有一个指针files,指向一张表files_struct,每个元素都指向一个被打开文件,下标就是被打开文件的文件描述符。所以文件描述符的本质就是数组下标。

缓冲区

在这里插入图片描述

缓冲区本质是一块内存区域,我们说的缓冲区和内核中的缓冲区没有关系,是语言层面的缓冲区,C语言自带缓冲区。
为什么要有缓冲区:a.提高使用者的效率 b.聚集数据,一次拷贝,提高整体效率,减少拷贝次数,调用系统调用是有成本的。
文件缓冲区在哪:文件缓冲区是被FILE结构体所维护的,一个文件维护一个缓冲区。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/425828.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于YOLOv的目标追踪与无人机前端查看系统开发

一、背景与简介 随着无人机技术的快速发展,目标追踪成为无人机应用中的重要功能之一。YOLOv作为一种高效的目标检测算法,同样适用于目标追踪任务。通过集成YOLOv模型,我们可以构建一个无人机前端查看系统,实现实时目标追踪和可视化…

构建高效的接口自动化测试框架思路

在选择接口测试自动化框架时,需要根据团队的技术栈和项目需求来综合考虑。对于测试团队来说,使用Python相关的测试框架更为便捷。无论选择哪种框架,重要的是确保 框架功能完备,易于维护和扩展,提高测试效率和准确性。今…

循序渐进,搞懂什么是回溯算法

循序渐进,搞懂什么是回溯算法 回溯算法简介 回溯算法(backtracking algorithm)实际上是一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回&#…

【高数】常数项级数概念与性质

下面为个人数学笔记,有需要借鉴即可。 一、常数项级数概念 二、常数项级数性质 三、调和级数 完。

文件底层的深入理解之文件输入输出重定向

目录 一、文件fd的分配规则 二、对输出重定向现象的理解 三、输出输入重定向的简单实现 1、输出重定向 2、输入重定向 一、文件fd的分配规则 最小的没有被使用的数组下标,会被分配给最新打开的文件。 二、对输出重定向现象的理解 正如上面这段代码所示&#xff0…

IO多路复用:提高网络应用性能的利器

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

WEB APIs (5)

window对象 BOM(浏览器对象模型) 其为js操作浏览器提供了方法 window对象是一个全局变量,是BOM树根节点 BOM的属性和方法都是window的,如document、console.log()等 var定义在全局全局作用域中的变量、函数都会变成window对象…

138.乐理基础-等音、等音程的意义

上一个内容:137.乐理基础-协和音程、不协和音程 上一个内容里练习的答案: 等音、等音程的意义,首先在 19.音阶 里写了,一个调使用的音阶应当是从主音快开始,以阶梯状的形式进行到主音结束,这样才能明显从乐…

VMware Workstation Pro 17 虚拟机软件安装教程

VMware软件介绍 VMware Workstation是一款功能强大的桌面虚拟计算机软件,提供用户可在宿主机操作系统上同时运行不同的操作系统(虚拟化技术),所运行的操作系统可方便的进行复制和移动,突破传统架构的限制。本文将以VMware Workstation Pro 1…

tomcat 反向代理 自建博客 修改状态页 等

一 自建博客 随后&#xff0c;拷贝到webapps下面 并且做软连接 随后重定向 并且下载 cat >/etc/yum.repos.d/mysql.repo <<EOF [mysql57-community] nameMySQL 5.7 Community Server baseurlhttp://repo.mysql.com/yum/mysql-5.7-community/el/7/x86_64/ enabled1 g…

excel中如何使用VLOOKUP和EXACT函数实现区分大小写匹配数据

在 Excel 中&#xff0c;VLOOKUP 函数默认情况下是不区分大小写的&#xff1a; 比如下面的案例&#xff0c;直接使用VLOOKUP函数搜索&#xff0c;只会搜索匹配到不区分大小写的第一个 如果我们想要实现区分大小写的精确匹配&#xff0c;可以使用 EXACT 函数结合 VLOOKUP 函数 …

openGauss学习笔记-234 openGauss性能调优-系统调优-资源负载管理-资源管理准备-设置控制组

文章目录 openGauss学习笔记-234 openGauss性能调优-系统调优-资源负载管理-资源管理准备-设置控制组234.1 背景信息234.2 前提条件234.3 操作步骤234.3.1 创建子Class控制组和Workload控制组234.3.2 更新控制组的资源配额234.3.3 删除控制组 234.4 查看控制组的信息 openGauss…

QT Mingw32/64编译ffmpeg源码生成32/64bit库以及测试

文章目录 前言下载msys2ysamFFmpeg 搭建编译环境安装msys2安装QT Mingw编译器到msys环境中安装ysam测试 编译FFmpeg测试 前言 FFmpeg不像VLC有支持QT的库文件&#xff0c;它仅提供源码&#xff0c;需要使用者自行编译成对应的库&#xff0c;当使用QTFFmpeg实现播放视频以及视频…

知识图谱1——neo4j

2024年要搞知识图谱&#xff0c;因此没有办法&#xff0c;只能将我之前固守的JDK1.8&#xff0c;升级到JDK21&#xff0c;因为JDK21也是LTS版本&#xff0c;neo4j高版本就不支持JDK8&#xff0c;因此没有办法&#xff0c;只有升级了。写这篇只是一个搭建笔记&#xff0c;我的初…

随机生成验证码

随机生成验证码 需求&#xff1a;随机生成一个任意位的验证码包含数字、大写字母和小写字母 1.代码实现 package com.ham;import java.util.Random;public class case2 {public static void main(String[] args) {System.out.println(code(4));}public static String code(i…

深入了解Java虚拟机(JVM)

Java虚拟机&#xff08;JVM&#xff09;是Java程序运行的核心组件&#xff0c;它负责解释执行Java字节码&#xff0c;并在各种平台上执行。JVM的设计使得Java具有跨平台性&#xff0c;开发人员只需编写一次代码&#xff0c;就可以在任何支持Java的系统上运行。我们刚开始学习Ja…

考研数学——高数:微分方程

一、一阶线性微分方程 两种形式&#xff1a; 非齐次&#xff1a; 齐次&#xff1a; 推导过程 推导公式的过程一般由特殊到一般&#xff1a;所以先求解齐次方程的解 &#xff08;然后对等式两边同时积分&#xff09; 再来求非齐次方程的解&#xff0c;由…

小程序图形:echarts-weixin 入门使用

去官网下载整个项目&#xff1a; https://github.com/ecomfe/echarts-for-weixin 拷贝ec-canvs文件夹到小程序里面 index.js里面的写法 import * as echarts from "../../components/ec-canvas/echarts" const app getApp(); function initChart(canvas, width, h…

[数据结构]栈

1.栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出的原则。 压栈&#xff1a;栈的插入操作叫做进栈/压栈/入栈&#…

XUbuntu22.04之显示实时网速(二百一十八)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…
最新文章