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.hqwc.cn/news/572044.html

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

相关文章

【ORB-SLAM3】在 Ubuntu20.04 上编译 ORM-SLAM3 并使用 D435i、EuRoC 和 TUM-VI 运行测试

【ORB-SLAM3】在 Ubuntu20.04 上编译 ORM-SLAM3 并使用 D435i、EuRoC 和 TUM-VI 运行测试 1 Prerequisites1.1 C11 or C0x Compiler1.2 Pangolin1.3 OpenCV1.4 Eigen3 2 安装 Intel RealSense™ SDK 2.02.1 测试设备2.2 编译源码安装 (Recommend)2.3 预编译包安装 3 编译 ORB-S…

【C语言】C语言基础习题详解(牛客网)二分查找逻辑

主页:醋溜马桶圈-CSDN博客 专栏:C语言_醋溜马桶圈的博客-CSDN博客 gitee:mnxcc (mnxcc) - Gitee.com 目录 1.三目运算符的使用 三目运算符,即a>b?a:b类型的,很多时候适当的使用三目运算符可以使得代码更简洁有序&…

4个AI智能写作平台,为你解决文章写作问题

在信息时代,写作是一项重要的技能,无论是在学术领域还是商务环境中。然而,对于许多人来说,写作并不是一件轻松的事情。但是,随着人工智能的发展,有许多AI智能写作平台可以帮助我们解决文章写作问题。在本文…

开放大学2024年春《数控技术 060253》综合大作业参考答案

答案:更多答案,请关注【电大搜题】微信公众号 答案:更多答案,请关注【电大搜题】微信公众号 答案:更多答案,请关注【电大搜题】微信公众号 单选题 1数控系统的核心是( ) …

#Linux系统编程(关于解决Source Insight自动补全的问题)

(一)发行版:Ubuntu16.04.7 (二)记录: (1)参考博文 Source Insight 4.0 添加函数库的头文件实现函数的自动补齐 - 简书 (jianshu.com)https://www.jianshu.com/p/96595eefb988 &am…

SQLAlchemy模型映射提示declarative_base() takes 0 positional arguments but 1 was given

原码: #SQLAlchemy模型映射表结构. from sqlalchemy import create_engine,Column,Integer,String from sqlalchemy.ext.declarative import declarative_base# 数据库的变量 HOST 127.0.0.1 PORT 3306 DATA_BASE itbz USER root PWD 123456 DB_URL fmysqlpy…

微服务架构学习汇报PPT

所有关于微服务架构的知识也好,经验也罢,不一定适合每个希望做微服务系统的技术人员的实际需求。“道无常道,法无常法,君子审时度势,自可得而法”。实际项目里需要做哪些工作,采取哪些策略,先后…

留存测试数据,Apipost接口用例详解

接口用例可以在不影响源接口数据的情况下对接口添加多个用例,方便测试并保存测试数据。 创建用例 左侧目录选择接口后进入接口用例页面,点击添加用例 在弹出窗口中修改各种参数。如登录接口,可修改用户名为空,并添加断言。 执行…

实现ls -l 功能,index,rindex函数的使用

index(); rindex();----------------------------------------------------------------- index第一次遇到字符c&#xff0c;rindex最后一次遇到字符c&#xff0c;返回值都是从那个位置开始往后的字符串地址 #include <stdio.h> #include <sys/types.h> #include &…

CentOS7.7安装XIAOJUSURVEY问卷系统

XIAOJUSURVEY问卷系统&#xff0c;适用于市场调研、客户满意度调研、在线考试、投票、报道、测评等众多场景。数据能力上&#xff0c;经过上亿量级打磨&#xff0c;沉淀了分题统计、交叉分析、多渠道分析等在线报表能力&#xff0c;快速满足专业化分析。 一、在CentOS7.7上安装…

01使用调试工具

文章目录 前言一、用openocd打开单片机二、利用4444端口向单片机写入hex文件三、利用3333端口和gdb进行调试四、之前我出的问题总结 前言 之前写了一篇关于在linux下搭建stm32标准库的文章后&#xff0c;有一些小伙伴们还是出现了一些奇奇怪怪的错误&#xff0c;这一篇文章就是…

160.乐理基础-等和弦与一些做题问题

如果到这五线谱还没记住还不认识的话去看102.五线谱-高音谱号与103.五线谱-低音谱号这两个里&#xff0c;这里面有五线谱对应的音名&#xff0c;对比着看 如果一章没落下&#xff0c;看到这里&#xff0c;但是看不懂什么意思&#xff0c;那就强行下看&#xff0c;看着看着指不…