Linux---文件(1)---初识文件

news2024/11/13 10:47:40

目录

预备知识

文件操作接口

打开文件接口

重定向与文件操作关系

"w"方式与重定向

“a”方式与追加重定向

写入文件接口

读取文件接口

系统调用接口

参数解析


预备知识

我们知道,创建出一个空文件也要在内存中占空间。

文件=文件内容+文件属性

操作文件本质就是操作文件内容或文件属性。

我们在访问文件之前,都需要用编辑软件先打开这个文件,操作文件本质都是通过执行代码的方式完成操作的,都是通过被CPU处理来完成的。所以,文件在操作之前必须创建进程、将文件加载到内存中,让CPU去调度这个进程来完成文件操作。文件本质是被进程打开的

进程可以打开多个文件。

在某一时间段内,系统中存在多个进程,也可能同时存在更多的被进程打开的文件,操作系统要管理这些被多个进程打开的文件,就需要"先描述,再组织"。

内核中一定要有描述被打开的文件的结构体,并定义其对象管理每个被进程打开的文件,并将其节点以某种数据结构连接。此后,对打开文件的管理就变成了对某种数据结构的增删查改了。

操作这个文件是通过操作系统执行对应的系统调用接口来实现的。

系统没有将磁盘中的所有文件都打开,被进程打开的文件在内存中称为内存文件,没有被进程打开的文件在磁盘中称为磁盘文件。

文件操作接口

打开文件接口

重定向与文件操作关系

"w"方式与重定向

“a”方式与追加重定向

总结一下

重定向操作的前提是先打开此文件,本质是向文件内做写入操作。

重定向>时,本质是先以"w"方式打开(会提前自动清空),然后再写入。

追加重定向>>时,本质是将文件以"a"方式打开,从文件结尾处开始追加写入。

写入文件接口

进程在启动时,会自动记录自己启动时所在的目录路径,默认将当前目录路径存储在/proc/进程pid这个文件夹中的cwd连接文件中。

如果需要修改,则需要使用chdir接口。

cwd文件记录当前目录路径,我们在使用fopen接口的时候,默认就是在当前目录下打开文件,就是借助了cwd文件,由cwd文件和fopen接口的第一个参数进行拼接为绝对路径来寻找文件。

读取文件接口

在执行文件写入操作过程中,首先创建指定的空文件(文件存在就不创建),由操作系统写入到内存(缓冲区)中,执行到文件退出时,再由操作系统将缓冲区的内容刷新到磁盘文件中。

程序在启动时,会默认打开三个文件流,stdin、stdout、stderr。

extern FILE *stdin;  //标准输入流
extern FILE *stdout; //标准输出流
extern FILE *stderr; //标准错误流

操作系统设计者在设计的时候,考虑到用户从何处输入数据、将输出信息输出到何处、遇到错误之后将错误记录到何处。基于这样的考虑和人们使用这三个文件频率足够高,所以设计成程序启动时默认打开,程序退出时默认关闭。

如果程序默认不帮我们打开这三个文件流,那么我们在做指定操作的时候,就需要打开指定的文件流。比如:我们在输入的时候,就要提前打开stdin文件流,才能进行输入操作。

程序在启动时,这三个文件被默认打开,可以直接使用,我们使用对应的接口时(sacnf/printf)内部一定是对这三个文件进行操作。一般来说可以认为显示器文件就是stdout、键盘文件就是stdin。键盘、显示器都是硬件,我们对其进行读写操作时,底层必须使用操作系统提供的系统调用接口,完成从上层到底层硬件的操作过程。

系统调用接口

访问文件不仅仅有语言上的访问文件接口,操作系统必须要提供对应的访问文件的系统调用接口。

参数解析

const char *pathname:文件所在路径

int flags:文件打开方式

O_RDONLY:只读模式 
O_WRONLY:写方式
O_RDWR  :读写方式
O_CREAT :若文件不存在就创建
O_TRUNC :写入之前清空文件
O_APPEND:从文件结尾处开始追加写入

采用open系统调用,以O_WRONLY方式写入时,如果当前目录下没有该文件,就会报错。

如果不存在就创建则需要带上O_CREAT参数,但创建出来的文件的权限为会出现乱码现象,所以就需要第三个参数mode_t mode(文件起始权限)。

mode_t mode:文件起始权限

mode参数是起始权限会被umask过滤为最终权限,mode格式为0xxx(xxx为八进制权限数字)。

但是,我们如果不想使用系统的umask,想为此进程自定义一个umask,就需要使用umask接口。

在系统层面,每一个文件都有一个特有的文件描述符,通过这个文件描述符来控制文件,对此文件操作都是借助文件描述符。

需要在写入之前做一下清空,就需要带上O_TRUNC选项。

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

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

相关文章

raw.githubusercontent.com未能解析” 解决方案

1.操作场景 通过windows11 powershell 下载依赖包 2.报错信息如下 irm : 未能解析此远程名称: raw.githubusercontent.com 所在位置 行:1 字符: 27 & ([scriptblock]::Create((irm "https://win11debloat.raphi.re/"))) ~~~~~~~~~…

C++知识点总结(54):复杂模拟综合

复杂模拟综合 例题1. 玩具谜题2. 猴子兄弟爬山3. 浇水4. 数组旋转5. 石头剪刀布6. 巨石滚滚 例题 1. 玩具谜题 小南有一套可爱的玩具小人,它们各有不同的职业。 有一天,这些玩具小人把小南的眼镜藏了起来。 小南发现玩具小人们围成了一个圈&#xff0c…

llm 是泡沫?

这篇文章不谈技术,只想聊聊自己这两年从事 llm 工作的一些感悟。 我个人对 llm 是一种很复杂的态度。毕竟,它真的击碎了我 2023 年之前所有的技术积累,以前在 nlp 苦心钻研的训练经验、模型结构、不同任务类型的不同处理技巧,好像…

个微管理撤回删除的消息都可以查看

有没有经历过误删微信消息的尴尬时刻?😅或者想知道撤回的消息到底是什么内容?今天,我要向大家推荐一个多功能微管理神器,帮你轻松解决这些问题!💪💌 1️⃣ 多个账号同时在线 &#x…

nefu暑假集训3 并查集与最小生成树 个人模板+例题汇总

前言&#xff1a; 并查集与最小生成树的训练。 正文&#xff1a; 链接&#xff1a;并查集与最小生成树 - Virtual Judge (vjudge.net) 题目&#xff1a; A - 关押罪犯&#xff1a; #include <bits/stdc.h> using namespace std; const int N200005; int fa[N],d[N]; …

实现一个能设置MaxLine的LayoutManager

实现一个能设置MaxLine的LayoutManager 有时候&#xff0c;我们会遇到这种需求&#xff1a;一个线性的列表布局&#xff0c;当item量很少的时候&#xff0c;就是wrap_content直接展示完所有item&#xff0c;但是当item数量超过某个数时就要固定高度&#xff0c;让其变成可滑动…

AOP 面向切片编程

目录 1. 什么是AOP 2. AOP的应用场景 3. AOP在Java中的实现 4. Spring AOP概述 5. Spring AOP的配置 1.在pom.xml文件中添加Spring AOP的依赖&#xff1a; 2. 定义切面 3. 启用AOP 4. 目标类 5. 测试AOP 6. AOP与其他技术的对比 面向切面编程&#xff08;AOP, Aspec…

SPI通信(软件模拟)

1 软件SPI程序框架 2 软件SPI交换一个字节的先后顺序 3 读取W25q64芯片厂商ID,设备ID 4 宏定义W26q64指令码 5 页缓冲区最大256字节&#xff0c;超过就会忙碌 6 页编程

生产环境中变态开启devtools(强制)

写到最前面 首先&#xff0c;你已经下载了google的插件【vue devtools】&#xff0c;不知道怎么下载&#xff0c;留言博主 如果你想看的项目中的vuetools插件打开是这样的 Vue.js is detected on this page. Devtools inspection is not available because it’s in product…

【中学教资-信息技术】多媒体文件大小的存储

图像/音频/视频文件大小的计算 1 图像文件2 音频文件3 视频文件4 例题5 总结 视频讲解&#xff1a;音频文件大小/视频文件大小计算-失舵之舟 1 图像文件 压缩比原始大小/被压缩之后大小 颜色深度&#xff1a;指图像中每个像素所占的二进制位数&#xff08;bit&#xff09; n位…

BioXM一款实用的生物小软件

软件介绍 BioXM是一款非常简单明了的分子生物学软件&#xff0c;全中文操作界面非常友好。 DNA序列分析、蛋白质序列分析、多序列比对、氨基酸相似性计算、酶切位点分析、ORF分析、分子量和等电点预测、序列数据库等。 软件下载 https://pan.quark.cn/s/84df485efd6e安装教…

Vxe UI vue vxe-table 如何在表格中使用上传附件、上传图片

Vxe UI vue vxe-table 如何在表格中使用上传附件、上传图片 效果图 在表格中显示缩略图模式上传附件或图片 点击更多按钮查看全部 鼠标拖动上传 代码 <template><div><vxe-grid v-bind"gridOptions"></vxe-grid></div> </tem…

第九周:机器学习

目录 摘要 Abstract 一、RNN 1、引入 2、RNN的分类 二、LSTM 1、基本结构 2、具体步骤 3、举例说明 4、原理理解 总结 摘要 本周主要围绕RNN进行探讨&#xff0c;从为什么需要这类”循环网络“入手&#xff0c;提到了”slot filling“技术&#xff0c;接着又对R…

大模型赋能风控运营:效率跃升的密码

一、大模型助力风控运营的背景与趋势 大模型兴起的背景 随着金融行业的迅速发展和数据量的爆炸式增长&#xff0c;传统的风控运营手段逐渐难以满足复杂多变的风险形势。大数据、人工智能等技术的不断进步&#xff0c;为大模型在风控运营领域的应用提供了技术支撑。金融机构面…

海洋大地测量基准与水下导航系列之一引子

海底大地基准网是一组布放在海底的声学基准站&#xff0c;组建类似GNSS星座的定位系统&#xff0c;既可以对水面及水下的各类设备提供时间和空间信息&#xff0c;也可用来监测海底板块及水体环境的动态变化。海底声学基准站与海面GNSS、海底重力站联合打造立体的观测控制网&…

十道MySQL必问面试题

你是如何理解最左前缀原则的&#xff1f;你是如何理解行锁、GAP锁、临键锁的&#xff1f;你是如何理解MVCC的&#xff1f;你是如何理解count(*)和count(1)的&#xff1f;你是如何理解Online DDL的&#xff1f;你知道哪些情况下会导致索引失效&#xff1f;你是如何理解filesort的…

fastmock使用

FastMock 是一个在线工具&#xff0c;用于快速创建和管理模拟 API&#xff08;Mock API&#xff09;。它主要用于前端开发&#xff0c;允许开发者在没有真实后端服务的情况下&#xff0c;模拟 API 响应&#xff0c;从而加速开发和测试过程。 FastMock网址&#xff1a;fastmock.…

Java多进程调用dll程序和exe程序

&#x1f3af;导读&#xff1a;本文介绍了使用Java调用本地DLL及EXE程序的方法。针对DLL调用&#xff0c;文章提供了基于Java Native Access (JNA) 库的具体实现方案&#xff0c;包括定义Java接口以映射DLL中的函数&#xff0c;并展示了如何加载DLL及调用其中的方法。对于EXE程…

Python 数据可视化:工具与实践

文章目录 数据可视化可视化库特点对比实例&#xff1a;绘制基本数据分布图评估维度 交互式可视化与静态图表实例&#xff1a;创建交互式折线图评估维度 实时数据可视化实例&#xff1a;展示实时股票数据评估维度 图表设计原则实例&#xff1a;设计适合展示销售数据的条形图评估…

论文辅助笔记:LP_BERT

1 train_task1.py 1.1 main部分 读取命令行参数&#xff0c;调用task1函数 1.2 task1 train 1.3 task1 valid 1.3 collate_fn 2 Dataset 2.1 train dataset 2.2 valid dataset 3 LPBERT 3.1 不同的embedding day-of-week embedding和time-of-day embedding X位置和Y位置的…