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

目录

一、认识 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.mzph.cn/news/776097.shtml

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

相关文章

基于SpringBoot和Vue的课程作业管理系统的设计与实现

今天要和大家聊的是一款基于SpringBoot和Vue的课程作业管理系统的设计与实现。 !!! 有需要的小伙伴可以通过文章末尾名片咨询我哦!!! 💕💕作者:李同学 💕&am…

element表格 加滚动,监听底部实现分页加载

表格要实现滚动很简单,给他加一个高度即可 height"300" 然后是监听事件 mounted() {this.lazyLoading();}, methods:{lazyLoading(){let dom document.querySelector(".el-table__body-wrapper");dom.addEventListener("scroll", (…

踩坑uniapp中打包Andiord app,在真机调试时地图以及定位功能可以正常使用,打包成app后失效的问题

首先看到这是uni官网提出的,app上建议使用高德地图。 下面就用高德地图进行配置。 步骤一:登陆高德地图控制台 名称和类型根据自己情况填写选择即可 步骤二: 添加key 步骤三:取到SHA1 进入uniapp开发官网 点击应用名称&#…

算法模型离线评估方案

1 引言2需求背景3特征评估 3.1特征表维护3.2样本频率分布直方图概览3.3Pearson相关系数计算3.4缺失率计算4模型评估 4.1模型离线AUC评估 4.1.1什么是AUC4.1.2AUC的优势:4.2TensorBoard可视化 4.2.1项目中集成tensorboard4.2.2启动tensorboard命令4.2.3可视化效果4.3离线实验记录…

SpringBoot SpringMVC (详解)

6. SpringBoot Spring 的诞⽣是为了简化 Java 程序的开发的,⽽ Spring Boot 是为了快速开发 Spring 程序开发而诞生的。 Spring Boot 的优点: 快速集成框架,Spring Boot 提供了启动添加依赖的功能,⽤于秒级集成各种框架。内置运⾏…

JAVA WEB 能够实现整个文件夹的上传下载吗?

导入项目: 导入到Eclipse:导入项目 导入到IDEA:导入项目 springboot统一配置:springboot-配置 下载示例: https://gitee.com/xproer/up6-jsp-eclipse/tree/6.5.40/ 工程 NOSQL NOSQL示例不需要任何配置,可…

【面试经典150 | 】最长递增子序列

文章目录 Tag题目来源解题思路方法一:动态规划 写在最后 Tag 【动态规划】【数组】 题目来源 300. 最长递增子序列 解题思路 方法一:动态规划 定义状态 dp[i] 表示以位置 i 对应整数为末尾的最长递增子序列的长度。 状态转移 我们从小到大计算 dp…

FASTAPI系列 16-其他响应类型

FASTAPI系列 16-其他响应类型 文章目录 FASTAPI系列 16-其他响应类型前言一、HTMLResponse 响应 HTML二、纯文本响应三、另外的JSON 响应四、FileResponse文件五、StreamingResponse六、RedirectResponse 重定向请求总结更多内容,请关注公众号, 发送666 更可以得到免…

解决配置文件中文乱码

一、问题 二、解决方法

HTML5+CSS3小实例:文字边框视觉错位

实例:文字边框视觉错位 技术栈:HTML+CSS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scal…

StringRedisTemplate与RedisTemplate详解【序列化的方式不同】

spring 封装了 RedisTemplate 对象来进行对redis的各种操作&#xff0c;它支持所有的 redis 原生的 api。在RedisTemplate中提供了几个常用的接口方法的使用&#xff0c;分别是: private ValueOperations<K, V> valueOps; private HashOperations<K, V> hashOps; …

TLSR8258 MTU、DLE(PDU)

本文基于泰凌微TLSR8258 M1S1 demo。 1.DLE&#xff1a;LE Data Packet Length Extension 中文全称&#xff1a;低功耗蓝牙数据包长度扩展。 这是一个在2014年12月2日正式发布的bluetooth for BLE添加的新特性&#xff0c;以支持在LL Data PDU更长的数据&#xff0c;最大支持…

自己编译SQLite或将SQLite移植到新的操作系统(六)

返回&#xff1a;SQLite—系列文章目录 上一篇:SQLite中的动态内存分配&#xff08;五&#xff09; 下一篇&#xff1a;SQLite—系列文章目录 1.0 引言 对于大多数应用程序&#xff0c;推荐的构建方法 SQLite是使用合并代码 文件 sqlite3.c 及其相应的头文件 sqlite3.…

刚刚,百度和苹果宣布联名

百度 Apple 就在刚刚&#xff0c;财联社报道&#xff0c;百度将为苹果今年发布的 iPhone16、Mac 系统和 iOS18 提供 AI 功能。 苹果曾与阿里以及另外一家国产大模型公司进行过洽谈&#xff0c;最后确定由百度提供这项服务&#xff0c;苹果预计采取 API 接口的方式计费。 苹果将…

Jenkins用户角色权限管理

Jenkins作为一款强大的自动化构建与持续集成工具&#xff0c;用户角色权限管理是其功能体系中不可或缺的一环。有效的权限管理能确保项目的安全稳定&#xff0c;避免敏感信息泄露。 1、安装插件&#xff1a;Role-based Authorization Strategy 系统管理 > 插件管理 > 可…

Docker 哲学 - Dockerfile 指令

Dockerfile 的 entrypoint 和 cmd 书写方式一样吗&#xff0c;分别用一个node项目的 demo来举例 Dockerfile 的 entrypoint 、cmd 有什么区别&#xff0c;分别举例他们同时出现的场景和 单独出现的场景 entrypoint 和 cmd 命令&#xff1a; 同时出现&#xff1a; 1、cmd 作为 e…

【教程】iOS如何抓取HTTP和HTTPS数据包经验分享

&#x1f4f1; 在日常的App开发和研发调研中&#xff0c;对各类App进行深入的研究分析时&#xff0c;我们需要借助专业的抓包应用来协助工作。本文将介绍如何使用iOS手机抓包工具来获取HTTP和HTTPS数据包&#xff0c;并推荐一款实用的抓包应用——克魔助手&#xff0c;希望能够…

快速上手Pytrch爬虫之爬取某应图片壁纸

一、前置知识 1 爬虫简介 网络爬虫&#xff08;又被称作网络蜘蛛、网络机器人&#xff0c;在某些社区中也经常被称为网页追逐者)可以按照指定的规则&#xff08;网络爬虫的算法&#xff09;自动浏览或抓取网络中的信息。 1.1 Web网页存在方式 表层网页指的是不需要提交表单&…

《数据结构学习笔记---第三篇》---单链表具体实现

目录 1.链表 1.1 链表的概念及结构 2.不带头单链表的实现 2.1创建头文件“SList.h” 2.2 创建具体接口实现文件SList.c 2.2.1打印 2.2.2申请链表结点 2.2.3创建一个长度为n的链表 2.2.4尾插尾删 2.2.5头插头删 2.2.6寻找x元素&#xff0c;返回pos 2.2.7插入和删除pos…

量子专家联合开展欧洲之星项目“SupremeQ”以实现光量子计算优势

内容来源&#xff1a;量子前哨&#xff08;ID&#xff1a;Qforepost&#xff09; 编辑丨王珩 编译/排版丨浪味仙 沛贤 深度好文&#xff1a;1800字丨10分钟阅读 近日&#xff0c;英国全栈光量子计算系统公司 ORCA Computers、德国单光子探测器提供商 Pixel Photonics、丹麦量…