Linux基础IO(操作系统层面理解文件)

news2024/12/29 13:47:21

目录

一、认识 open 函数

1.1 理解文件

1.2 open 函数 

1.3 函数选项和宏

二、 open 函数的返回值

三、 fd 的本质

3.1 各部分内容及关系

3.2 如何确定进程对应文件

四、Linux 一切皆文件?


一、认识 open 函数

在C语言中学习文件操作时,我们学过的诸如: fopen fclose fread fwrite 都是C标准库当中的函数,我们称之为库函数(libc)。但是从语言层面上,我们是无法完全理解文件的,必须要从操作系统层面来看文件!!
以后学习的如 open close read write lseek 都属于系统提供的接口,称之为系统调用接口

1.1 理解文件

在操作系统中,我们操作文件,本质上是进程在操作文件!所以我们学的是进程与文件的关系!

文件默认在磁盘中,而磁盘属于外设,它是计算机的硬件部分。所以我们向文件中写入,本质是我们在向硬件写入!但是用户没有权利向硬件写入呀,操作系统才是硬件的管理者,我们不可以绕过操作系统去管理硬件!我们只能通过操作系统向硬件写入,这就要求操作系统提供系统调用!而在C语言中使用的 fopen fclose fread fwrite 等函数,都是对系统调用的封装!我们在这里学习的目标就是使用系统调用来进行文件操作!

1.2 open 函数 

我们先来复习一下C语言中学过的文件操作,fopen:
那么如何使用系统调用实现上述功能呢?
我们使用 man 2 open 查一下手册,找到几个命令,

这样我们就可以实现像库函数一样的命令!其中open的选项使用 man 都可以查到。

但是我们查看 log.txt 时,看到他的权限好像并不是我们想要的读写权限,这是为什么呢?
其实这里又要牵扯到我们之前讲到的权限掩码 umask !

umask 也可以用 man 2 umask 查到相关用处哦

1.3 函数选项和宏

你是否有个疑惑,我们的函数是如何通过传进来的选项来进行相关的操作的呢?
其实我们的选项不过是系统给我们设置的宏参数而已。



这样一来,是不是觉得系统调用的传参也不是什么稀奇的事情!

二、 open 函数的返回值

各位有没有注意到,为什么我们库函数返回的是 [FILE *] ,而系统调用返回的却是 [int] 呢?

我们新建几个文件来看看 open 的返回值到底是什么,或者说到底有什么规律?

这里只是演示一下,但是不管新建多少次,我们的返回值总是从 3 开始的,那 0 1 2 去哪里了?

先说结论:
0 代表标准输入 —— 键盘

1 代表标准输出 —— 显示器

2 代表标准错误 —— 显示器

这些都叫做文件描述符 fd ,那么为什么我们只需要 fd 就可以向指定的位置读写了呢? fd 的本质是什么呢?

三、 fd 的本质

3.1 各部分内容及关系

3.2 如何确定进程对应文件

四、Linux 一切皆文件?

像我们上面理解的那般,那 fd == 0 1 2 时,我们的硬件也变成文件了?我们要怎么理解我们的键盘、显示器在 Linux 中都成为文件了呢?

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

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

相关文章

基于java+springboot+vue实现的超市在线销售系统(文末源码+Lw+ppt)23-356

摘 要 当今社会已经步入了科学技术进步和经济社会快速发展的新时期,国际信息和学术交流也不断加强,计算机技术对经济社会发展和人民生活改善的影响也日益突出,人类的生存和思考方式也产生了变化。传统超市在线销售采取了人工的管理方法&a…

MYSQL8.0安装、配置、启动、登入与卸载详细步骤总结

文章目录 一.下载安装包1.方式一.官网下载方式二.网盘下载 二.解压安装三.配置1.添加环境变量 三.验证安装与配置成功四.初始化MYSQL五.注册MySQL服务六.启动与停止MYSQL服务七.修改账户默认密码八.登入MySQL九.卸载MySQL补充:彻底粉碎删除Mysql 一.下载安装包 1.方…

ZC706+AD9361 运行 open WiFi

先到github上下载img,网页链接如下: https://github.com/open-sdr/openwifi?tabreadme-ov-file 用win32 Disk lmager 把文件写入到SD卡中,这一步操作会把SD卡重新清空,注意保存数据。这个软件我会放在最后的网盘链接中 打开linu…

宁波IATF16949质量管理认证体系如何认证?

🐶在当今竞争激烈的🌸汽车市场中,质量已成为企业👩‍❤️‍💋‍👨生存和发展的关键。IATF16949质量管理认证体系🍎作为国际汽车行业认可的🌺质量管理标准,已成为企业&…

IDEA设置代码自动提示不区分大小写

1. 打开设置 在 IntelliJ IDEA 中,点击顶部菜单栏的 File–>Settings(或者使用快捷键 Ctrl Alt S)。 2. 进入设置: 在弹出窗口左侧导航栏中选择 Editor --> General --> Code Completion,取消勾选 “Mat…

机器学习中的 K-Means算法及其优缺点(包含Python代码样例)

目录 一、简介 二、优缺点介绍 三、Python代码示例 四、总结 一、简介 K-Means算法是一种经典的无监督学习算法,用于将数据集中的样本分为 K 个不同的类别。K-均值聚类算法的工作原理如下: 随机选择 K 个中心点作为初始聚类中心。将每个样本点分配…

AI 成足球比赛「关键先生」:DeepMind 发布 TacticAI,战术布局实用性高达 90%

在刚刚结束的世界杯预选赛中,国足在天津主场以 4:1 的得分大胜新加坡,一扫上一场在领先优势下被对方逼平的阴霾,也迎来了球队 2024 年的首场胜利。目前,中国队暂居 C 组第 2 位,保住了晋级 18 强赛的希望。 享受胜利喜…

人工智能(pytorch)搭建模型25-基于pytorch搭建FPN特征金字塔网络的应用场景,模型结构介绍

大家好,我是微学AI,今天给大家介绍一下人工智能(pytorch)搭建模型25-基于pytorch搭建FPN特征金字塔网络的应用场景,模型结构介绍。特征金字塔网络(FPN)是一种深度学习模型结构,主要应用于目标检测任务中&am…

Linux 注入依赖环境

文章目录 配置依赖程序安装 JDK安装 Tomcat安装 mysql 配置依赖程序 下面配置依赖程序都以CentOS为例。 安装 JDK 可以直接使用 yum(CentOS) 直接进行安装。 先搜索,确定软件包的完整名称。 yum list | grep jdk再进行安装 进行安装的时候一定要先确保处在“管理…

《计算机工程与应用》投稿经验2024

要按照官网格式写论文,这会节省很多时间。审稿费120元,本人计算机视觉方向,9页,没有打折,版面费5000,彩图和表格过多的原因。版权协议等论文录用之后再交即可,一审二审的时候不用交,…

Python-VBA编程500例-022(入门级)

最长AB子串(Longest AB Alternating Substring)(或称为最长XY出现次数相同的子字符串)这个问题看似是一个比较抽象的编程问题,但在实际应用场景中,它可以用来解决一系列涉及平衡性和重复模式的实际问题。常见应用场景有: 1、DNA或RNA序列分析…

浅谈交直流混合微电网能量管理系统关键技术研究综述

摘要:为了提升交直流混合微电网健康有效发展,提高直流互联微电网中分布式电源的能源使用效率,提升区域微电网稳定发展,对交直流混合微电网能量管理系统关键技术进行分析和研究很有必要。文章主要从交直流混合微电网能量管理系统架…

JAVA的sort用法详解(二维数组排序,List<>排序,lambada表达式,自定义类型排序)

目录 前言&#xff1a; 一维数组降序&#xff1a; 方法1.Comparator接口&#xff1a; 代码实现&#xff1a; 方法2.Collections.reverseOrder()&#xff1a; 代码实现&#xff1a; 二维数组排序&#xff1a; 代码如下&#xff1a; List<>排序&#xff1a; 代码…

C++ 之多态虚函数原理及应用

文章目录 多态基本概念和原理虚函数的基本原理和概念虚析构和纯虚析构多重继承中的虚函数小结 多态基本概念和原理 多态的基本概念 **多态是C面向对象三大特性之一** 多态的定义 多态是一种面向对象编程概念&#xff0c;指同一个行为&#xff08;方法&#xff09;在不同的对象上…

Elastic 8.13:Elastic AI 助手中 Amazon Bedrock 的正式发布 (GA) 用于可观测性

作者&#xff1a;来自 Elastic Brian Bergholm 今天&#xff0c;我们很高兴地宣布 Elastic 8.13 的正式发布。 有什么新特性&#xff1f; 8.13 版本的三个最重要的组件包括 Elastic AI 助手中 Amazon Bedrock 支持的正式发布 (general availability - GA)&#xff0c;新的向量…

AI算法中的关键先生 - 反向转播与戴维莱姆哈特

0. 引言 机器学习的自动推导过程中有一个关键步骤&#xff0c;就是自动求解过程的参数反向传播过程&#xff0c;这个工作据说是这个人做的&#xff1a; Remembering David E. Rumelhart (1942-2011) – Association for Psychological Science – APSAPS Fellow and Charter …

极简wordpress网站模板

Pithy设计师wordpress网站模板 精练简洁的wordpress模板&#xff0c;设计师或设计工作室展示型网站模板。 https://www.jianzhanpress.com/?p6329

getshell2

怎么进后端 常见CMSgetshell 良精CMS GETSHELL1讲了很多自己看 动易CMS 学校政府 小企业很多这个CMS 网页直接插马 这是秒的方法 图片上传 编辑器漏洞这个CMS也有 怎么找编辑器F12 ctrlf editor 找到编辑器路径 利用文件目录解析漏洞将备份目录名后加上/a.asp然后备份b…

LC 101.对称二叉树

101. 对称二叉树 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输入&#xff1a; root [1,2,2,3,4,4,3] 输出&#xff1a; true 示例 2&#xff1a; 输入&#xff1a; root [1,2,2,null,3,null,3] 输出&#xff1a; false 提示&#x…

MySQL高阶SQL语句(二)

文章目录 MySQL高阶SQL语句&#xff08;二&#xff09;一、MySQL常用查询1、子查询1.1 语法1.1.1 结合select语句查询1.1.2 结合insert语句查询1.1.3 结合update语句查询1.1.4 结合delete语句查询1.1.5 在in前面添加not1.1.6 exists关键字 2、别名 二、MySQL视图1、视图介绍1.1…