Linux6.2、IO基础(文件系统接口)

news2024/9/26 3:26:58

个人主页:Lei宝啊 

愿所有美好如期而遇


直接使用系统接口

fopen底层封装的系统接口为open

pathname也就是文件路径,flags我们通过一个demo来理解。

首先我们应该了解的是位图,int有32个比特位,我们根据他的比特位是否为1来决定这个位我们是否使用,而我们的flags就是应用了位图来代表打开文件的方式,C库函数我们使用r,w,a等方式打开文件,而系统接口就没这么简单了,我们看下图:

O_RDONLY表示只读,O_WRONLY表示只写,O_RDWR表示读写,而且这三个我们必须包含一个,O_APPEND表示追加,O_CREAT表示创建,O_TRUNC表示清空文件。

我们发现他们都是大写的,这也就代表他们是个宏,我们来尝试看一下:

接下来我们来看demo:

所以我们的flags该怎么用呢?

我们先删除log.txt文件,我们希望以w方式打开文件,如果不存在则创建。

同时我们了解一下fclose的底层,方便我们演示后关闭文件,close参数就是open的返回值,这里先说这么多,后面细说。

我们的文件呢?我们不是以写的方式打开的吗?库函数做一步的工作,系统函数一步可完成不了,O_CREAT创建选项是不是没加呢?我们加上

我们创建出了文件,但是他的权限好像和我们touch出来的不一样,而且还标红了,所以我们还是少了东西,少了什么呢?

我们这个时候就需要使用带mode参数的open函数了,他代表着权限,我们传八进制。

0666,写成二进制就是110110110对应着rw-rw-rw-但是我们发现最后other所属组权限没有写,这就是因为umask掩码。

我们可以在函数里设置当前进程所要设定的掩码,不会影响到整个bash。

我们创建文件时需要路径,绝对路径或者相对路径,我们要在当前路径下创建文件,那么系统怎么知道当前路径是什么?根据可执行程序路径?源代码路径?或者是进程路径?我们来测试一下:

cwd指向的也就是我们进程的当前工作路径,exe指向我们可执行程序的路径,我们也就知道了创建文件当前路径的位置也就是进程所在路径。

综上所述我们也就可以体会到为什么要使用库函数的原因之一,就是因为难度,初学者使用系统调用的难度确实很高,让你初学C语言时包含一堆看不懂的头文件,以及学习位图的理解,涉及到系统的知识,会不会直接劝退~。

当然,我们的w打开文件方式还没有复现完全,缺少O_TRUNC清空,但是现在,这很简单不是吗?包括追加,相信也不是什么难事,所以不做演示。

fwrite底层封装的系统接口为write 

fread底层封装的系统接口为read

 fclose底层封装的系统接口为close

实现cat  

本节我们使用了不少fd,但是没有解释什么是fd,我们下节将会引入fd,以及分析系统接口的细节,我们下节见!

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

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

相关文章

【数据结构】字符串匹配|BF算法|KMP算法|next数组的优化

字符串匹配算法是在实际工程中经常遇到的问题,也是各大公司笔试面试的常考题目,本文主要介绍BF算法(最好想到的算法,也最好实现)和KMP算法(最经典的) 一、BF算法 BF算法,即暴力(Bru…

轻松管理固定资产,易点易动固定资产管理系统为企业开启新篇章

在现代企业运营中,固定资产管理是一个不可忽视的关键环节。有效地管理和维护固定资产不仅可以提升企业运营效率,还能最大限度地发挥资产的价值。为了满足企业对固定资产管理的需求,我们推出了易点易动固定资产管理系统,一款功能强…

网站使用https认证

随着网络的普及和依赖程度的增加,网站安全性问题也日益凸显。为了确保用户和网站之间的数据传输安全,采用HTTPS认证已经变得至关重要。 1.数据安全是首要任务 在互联网上,信息传输是网站运作的基础。然而,未加密的传输容易受到中…

嵌入式-stm32-用PWM点亮LED实现呼吸灯

一:知识前置 1.1、LED灯怎么才能亮? 答:LED需要低电平才能亮,高电平是灯灭。 1.2、LED灯为什么可以越来越亮,越来越暗? 答:这是用到不同占空比来实现的,控制LED实现呼吸灯&…

千帆起航:探索百度智能云千帆AppBuilder在AI原生应用开发中的革新之路

千帆起航:探索百度千帆AppBuilder在AI原生应用开发中的革新之路 1.揭开帷幕,大模型第二次战役 自从 ChatGPT 横空出世后,一石激起千层浪,人工智能也正在从感知理解走向生成创造,这是一个关键里程碑。生成式大模型完成…

Spring Cloud + Vue前后端分离-第7章 核心业务功能开发

Spring Cloud Vue前后端分离-第7章 核心业务功能开发 7-1 课程管理功能开发 课程管理页面美化 1.课程管理页面美化 demo-course.jpg 复制search.html中的部分代码 course.vue 看效果 测试一下新增修改删除效果 1.课程管理页面美化2 scoped:style下的样式只应用于当前组件…

数字人直播系统源码开发:实现电商必备的一键生成真人直播卖货

随着互联网技术的不断演进和电子商务的蓬勃发展,直播电商成为了一种新兴的销售模式。然而,传统的直播方式存在着一些问题,比如主播的时间和精力有限,无法满足大量商品的销售需求。为了解决这个问题,数字人直播系统应运…

2023RT-Thread开发者大会

参加了一次RT-Thread的开发者大会,相当有意思,虽然一天奔波挺累,但睡了半天之后简单剪了下22号的视频,也就有时间写自己的参会笔记了。 与openEuler社区不同,RT-Thread社区更专注于嵌入式,与硬件厂商结合…

长宁区科协常务副主席张正行一行到访深兰科技

12月22日,上海市长宁区科协常务副主席张正行、学会部部长洪嫣一行到访深兰科技总部,并与深兰科技集团董事长陈海波、深兰科技集团技术副总裁王雷博士等进行了会谈。 座谈中,陈海波详细介绍了深兰科技当前的企业发展及业务现状,并就…

WPS的JS宏实现WORD表格的首行以及整体格式设置

本文实现了在WORD文档中的表格的样式、字体的整体设置,以及首行的样式、字体的翻开设置。 例如一篇WORD文档,包含了200个表格,所有的表格需要设置为相同的样式: 字体 5号,方正仿宋_GB2312,行间距18磅&…

如何快速搭建接口自动化测试框架【附教程+源码】

1、接口测试 接口测试是对系统或组件之间的接口进行测试,主要是校验数据的交换,传递和控制管理过程,以及相互逻辑依赖关系。 接口自动化相对于UI自动化来说,属于更底层的测试,这样带来的好处就是测试收益更大&#xf…

拓扑排序相关leetcode算法题

文章目录 1.课程表2.课程表II3.火星词典 1.课程表 课程表 class Solution {//进行一次拓扑排序即可 public:bool canFinish(int n, vector<vector<int>>& prerequisites) {unordered_map<int,vector<int>> edges;//使用邻接表存图vector<int…

一起玩儿物联网人工智能小车(ESP32)——14. 用ESP32的GPIO控制智能小车运动起来(二)

摘要&#xff1a;本文主要讲解如何使用Mixly实现对单一车轮的运动控制。 下面就该用程序控制我们的小车轮子转起来了。打开Mixly软件&#xff0c;然后单击顶部“文件”菜单中的“新建”功能&#xff0c;我们来开启一个新程序的开发工作。 我们的工作同样是先从最简单的开始&am…

Java内存区域与内存溢出异常

Java与C++之间有一堵由内存分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来。 2.1 概述 对于从事C、C++程序开发的开发人员来说,在内存管理领域,他们即是拥有最高权力的“皇帝”,又是从事最基础工作的劳动人民——即拥有每一个对象的“所有权”,又…

ros2+gazebo+urdf:ros2机器人使用gazebo的urdf文件中的<gazebo>部分官网资料

原文链接SDFormat extensions to URDF (the gazebo tag) — Documentation 注意了ros2的gazebo部分已经跟ros1的gazebo部分不一样了&#xff1a; Toggle navigation SpecificationAPIDocumentationDownload Back Edit Version: 1.6 Table of C…

DRF之初识

目录 一、序列化和反序列化 【1】序列化 【2】反序列化 【3】小结 二、DRF的安装和快速使用 (1) 安装DRF&#xff1a; (2) 配置DRF&#xff1a; (3) 创建序列化器(Serializer)&#xff1a; (4) 创建视图(View)&#xff1a; (5) 配置URL路由&#xff1a; 【补充】下载…

使用Open3D实现3D激光雷达可视化:以自动驾驶的2DKITTI深度框架为例(下篇)

原创 | 文 BFT机器人 【原文链接】使用Open3D实现3D激光雷达可视化&#xff1a;以自动驾驶的2DKITTI深度框架为例&#xff08;上篇&#xff09; 05 Open3D可视化工具 多功能且高效的3D数据处理&#xff1a;Open3D是一个全面的开源库&#xff0c;为3D数据处理提供强大的解决方…

【LeetCode】链表精选12题

目录 快慢指针&#xff1a; 1. 相交链表&#xff08;简单&#xff09; 2. 环形链表&#xff08;简单&#xff09; 3. 快乐数&#xff08;简单&#xff09; 4. 环形链表 II&#xff08;中等&#xff09; 5. 删除链表的倒数第 N 个节点&#xff08;中等&#xff09; 递归迭…

WPF中数据绑定转换器Converter

使用场景&#xff1a;ViewModel中的数据如果跟View中的数据类型不匹配。 下面是以int类型调控是否可见为例子 步骤一&#xff1a;创建转换器类 在xaml中查看Converter的定义可以知道Converter是一个接口类型&#xff0c;因此转换器的类定义需要使用这个接口 internal class Vi…

【UML】第13篇 序列图(2/2)——建模的方法

目录 三、序列图建模 3.1 概述 3.2 建模的步骤 3.3 举例说明步骤 1.确定主要场景和流程 2.确定参与的对象 3.绘制序列图 4.注意事项 3.4 特殊的情况 序列图是我个人认为&#xff0c;UML中最重要的图之一。 而且序列图&#xff0c;对于业务建模&#xff0c;也有非常好…