文件fd.

共识原理:
1.文件 = 内容 + 属性

2.文件分为打开的文件 和 没打开的文件

3.打开的文件: 谁打开? 进程! ----本质是研究进程和文件的关系!
根据冯诺依曼原理,文件被打开,必须先被加载到内存!不然CPU怎么访问它
那么是文件内容被加载?还是属性被加载?还是都被加载?
一定要先把属性加载到内存,内容要不要被加载取决于要不要对文件做修改,理想情况是都被加载

一个进程可以打开多个文件,则进程与打开文件数量关系为
进程:打开的文件 = 1 :n
则操作系统内部,一定存在大量的被打开的文件!
------0S要不要管理这些被打开的文件呢? ----怎么管理???—先描述,在组织 — 在内核中,一个被打开的文件都必须有自己的文件打开对象,包含文件的很多属性。struct XXX{文件属性; struct XXX*next}; 用双链表组织起来

4.没打开的文件:∶在哪里放着呢? 在磁盘上。我们最关注什么问题?没有被打开的文件非常多。文件如何被分门别类的放置好…我们要快速的进行增删查改…快速找到文件
如何存储?

本文目标主要先研究被打开的文件

1、以C语言为主,先回忆一下C文件接口
打开文件的路径和文件名,默认在当前路径下新建一个文件,fopen中当前路径是什么?
当前路径,进程的当前路径cwd —如果我更改了当前进程的cwd(chdir),就可以把文件新建到其他目录

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

ls /proc/进程ID 可以查看进程task_stuct的绝大多数属性,cwp就是进程环境变量pwd改了个名字来的
在这里插入图片描述
下面用fwrite进行写入一段字符串
在这里插入图片描述
在这里插入图片描述
更改字符串由hello linux -> abcd 发现并不是abcdo linux 而是只有abcd

w方式打开的特性:
如果以w方式打开,如果文件不存在会创建一个
w : 写入之前,会对文件进行清空处理,并且从文件开始写入

观察输出重定向,盲猜一波它本质一定是打开这个文件并且是w模式打开的,因为他会先清空
在这里插入图片描述
问题:对文件进行写入字符串时,要不要把\0也加上?
在这里插入图片描述
答:字符串以\0结尾,是你C语言的规定,和我文件有什么关系? ??

a 方式打开 追加写
在这里插入图片描述
则 > 和 >> 一定是打开方式的区别 w / a

C程序默认再启动的时候帮我们打开三个流,标准输入stdin,标准输出stdout,标准错误stderr
这三个输入输出流就是文件
在这里插入图片描述

在C语言看来 向显示器写入和向文件写入没有区别
因为Linux下一切皆文件,所以我们可以不用printf,直接用文件fprintf等接口直接向显示器写入
在这里插入图片描述
那么问题来了
1、如何理解 Linux一切皆文件?
2、三个标准流为什么所有语言都要支持,它到底是什么?怎么做到的?

2、过渡到系统,认识文件系统调用
文件在磁盘上,磁盘是外部设备,访问文件其实是在访问硬件!
根据计算机体系层状结构和操作系统不相信任何用户,则C语言访问文件的库函数一定封装了文件系统调用接口!利用系统调用贯穿操作系统访问硬件
在这里插入图片描述
认识几个文件系统调用
1、open
在这里插入图片描述
对于flags是标志位,代表只写/追加/没有创建新文件/清空…
我们要是自己写可能在形参直接干上2~3以上标志位,但其实一个整形本来就有32位,可以利用一个Bit位代表一个状态
我们可以用一种优雅的方式来完成这个工作。做到只传一个int flags来完成标记
手册中看到O_RDONLY,O_WRONLY,这一看就是个宏,只有一个bit位是1,代表不同的状态!
在这里插入图片描述
比特位级别的标志位传递方式:
falgs提供了很多宏,只有一个Bit位为1,他可以传递多种标志位做按位或的组合,在函数内部再一与,就可以调用不同的功能函数
在这里插入图片描述
在这里插入图片描述
再回到open上来
1、O_WRONLY不会创建文件,如果文件不存在就打开失败,open返回值为-1,则需要或上O_CREAT
在这里插入图片描述

2、即使标志位为O_WRONLY|O_CREAT 新建文件权限为随机值,所以创建文件必须告诉Open第三个形参权限
在这里插入图片描述
在这里插入图片描述
0666为八进制,rw- rw- rw- ,可结果是664 那么是因为掩码的存在
在这里插入图片描述
umask默认002 也是八进制 可以通过更改umask的方式来就让文件权限是666
系统调用umask
在这里插入图片描述
在这里插入图片描述

3、访问文件的本质

4、重定向 && 缓冲区

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

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

相关文章

系列七、Mybatis的二级缓存

一、概述 Mybatis的二级缓存是多个sqlSession共享的,其作用域是mapper的同一个namespace,不同的sqlSession执行两次相同的查询,mybatis会将第一次执行完的数据放到二级缓存中(坑:需要执行close操作,要不然不…

通过Python脚本支持OC代码重构实践(二):数据项提供模块接入数据通路的代码生成

作者 | 刘俊启 导读 在软件开发中,经常会遇到一些代码问题,例如逻辑结构复杂、依赖关系混乱、代码冗余、不易读懂的命名等。这些问题可能导致代码的可维护性下降,增加维护成本,同时也会影响到开发效率。这时通常通过重构的方式对已…

创建ABAP数据库表和ABAP字典对象-使用基本类型增加账号字段03

新增字段 现在你将增加字段:account_number,基于基本类型 1.输入以下内容(包括句点),然后选择“代码补全”(Ctrl空格): key account_number : abap.2.从下拉列表中选择numc(len)并指定len为8。另外,指定这个关键字段为not null: key accoun…

频频让“智造大佬”们追加投资,长沙凭啥?

文 | 智能相对论 作者 | 范柔丝 自2021年长沙将每年11月1日确定为长沙“企业家日”后,今年已到了第三个长沙“企业家日”。 在完美闭幕的2023年第三届长沙“企业家日”活动中,长沙发布了民企研发投入增量10强、湘商回归标志性项目10强、湘商回归突出贡…

sql server数据库跟踪——SQL Server Profiler解析

工具: SQL Server Profiler这个工具是SQL Server数据库自带的语句执行跟踪工具,常使用于分析软件修改数据库时所执行的语句,适合用来研究软件运行数据库的原理。 打开方式: 本机安装了SQL server的话,都是自带的。直接…

c++设计模式二:原型模式

使用场景:当需要构建多个相同的类对象时,而且该类对象结构较为复杂,如果每个都重新组织构建会很麻烦。 其实,就是写一个拷贝构造函数,或者写一个拷贝每个成员变量的clone()方法。 举例说明:比如一个相亲网站…

R语言如何写一个爬虫代码模版

R语言爬虫是利用R语言中的网络爬虫包,如XML、RCurl、rvest等,批量自动将网页的内容抓取下来。在进行R语言爬虫之前,需要了解HTML、XML、JSON等网页语言,因为正是通过这些语言我们才能在网页中提取数据。 在爬虫过程中,…

阿里云无影升级2.0 云电脑解决方案时代到来

10月31日,杭州云栖大会上,阿里云宣布无影全新升级2.0:从云电脑到云上解决方案,帮助中小企业更便捷地构建云上办公,并开放无影产品及解决方案能力,为生态合作伙伴提供企业云平台,帮助其打造定制化…

无需服务器内网穿透Windows下快速搭建个人WEB项目

📑前言 本文主要是windows下内网穿透文章,如果有什么需要改进的地方还请大佬指出⛺️ 参考自:Windows搭建web站点:免费内网穿透发布至公网 🎬作者简介:大家好,我是青衿🥇 ☁️博客首…

[C++ ]:5.类和对象中(运算符重载补充)+ 类和对象下(初始化列表)

类和对象中(运算符重载补充) 类和对象下(初始化列表) 一.运算符重载补充:1.流插入运算符:1.考虑到隐含的参数指针:2.进行优化!2-1:解决办法:友元2-2&#xff…

Websocket传递JWT令牌

在访问带有[Authorize]的方法的时候,需要前端通过自定义报文头的形式将JWT令牌传递给后端进行验证,否则是不能访问带有[Authorize]的方法。 [Authorize]是用于限制对web应用程序中某些操作或控制器的访问。当[授权]属性应用于操作或控制器时,…

妙手ERP本期功能更新:TikTok支持自定义SKU规格、Temu支持创建尺码表、仓库库存可同步至Shopee全球产品 ......

为了给卖家朋友带来更好的使用体验,更高效地运营跨境店铺,妙手ERP在上周优化了以下多项功能。 01、产品模块优化 全平台 - 插件采集支持批量采集速卖通产品 - 店铺互踩、店铺产品增加销量筛选项 - 公用采集箱支持编辑产品父SKU、AI生成、SKU规格、尺码…

批量压缩图片大小的绝妙技巧,让你的图片更轻盈

在制作幻灯片演示时,经常需要插入图片作为视觉辅助,通过批量缩小图片大小,可以减小演示文件的大小,方便共享和传输。 那么怎么将图片缩小成了问题的关键,市面上不少方法都是需要通过下载软件来处理图片的,…

Chatgpt网页版根据关键词自动批量写原创文章软件【可多开自动登录切换gpt账号】

Chatgpt网页版根据关键词自动批量写原创文章软件介绍: 1、需要放入GPT账号和密码放入在账号库.txt里,可以放入多组账号密码,账号切换轮流使用。 2、可以自定义回答指令,也可多个回答指令随机切换。 3、可以给关键词加双标题&…

Django中的FBV和CBV

一、两者的区别 1、在我们日常学习Django中,都是用的FBV(function base views)方式,就是在视图中用函数处理各种请求。而CBV(class base view)则是通过类来处理请求。 2、Python是一个面向对象的编程语言…

java强转实验

不存在继承关系时,强转会出现编译时异常。即:无法将两个不同类型的对象做转换 当存在继承关系时,强转正常。备注:同名字段,类型一致,可以强转替代getset。同名字段,类型不一致,强转会…

HarmonyOS数据管理与应用数据持久化(一)

一. 数据管理概述 功能介绍 数据管理为开发者提供数据存储、数据管理能力,比如联系人应用数据可以保存到数据库中,提供数据库的安全、可靠等管理机制。 数据存储:提供通用数据持久化能力,根据数据特点,分为用户首选项、…

Spring Cloud应用- Eureka原理、搭建

初期对Spring Cloud的学习以应用搭建为主,所以内容不会太枯燥。 一直以来,自以为Spring全家桶的学习中,Spring framework是基础中的基础,部分内容也还是必须要读源码去理解底层原理,SpringMVC、SpringBoot&#xff0c…

11.2树的高度,表达式树,非递归遍历,层序遍历,奇偶树

课上 前序,根左右 中序,左根右 若前序中序相同,则树都没有左节点 求树的高度 表达式树 中缀表达式树 主要考虑括号问题 这个就是考虑递归底层,要结束时的情形;以及根节点的情形; 由于表达式树是满树&…

使用稳定扩散和SAM修改图像内容

推荐稳定扩散AI自动纹理工具: DreamTexture.js自动纹理化开发包 介绍 大型语言模型 (LLM) 和基础计算机视觉模型的最新突破为编辑图像或视频解锁了新的界面和方法。您可能听说过修复、复绘、生成填充和文本到图像;这篇文章将向您展示如何通过…