文件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,一经查实,立即删除!

相关文章

redis如何保证和mysql数据的一致性

Redis和MySQL是两种不同的数据库系统,它们在数据一致性方面有不同的特点和应用场景。保证Redis和MySQL数据的一致性通常需要考虑以下几个方面: 双写策略: 一种常见的方法是采用双写策略,即将更新操作同时写入Redis和MySQL。这确保…

JS计算中出现无限小数位的情况

原因分析: 在开发中遇到了浮点数转换为百分数的问题,用浮点数乘以100结果产生了一堆小数位。查资料发现原因是由于计算机计算会先把数字转换成二进制计算,然后在转换为10进制,导致精度丢失。 在计算机角度,计算机算的…

系列七、Mybatis的二级缓存

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

C#学习系列之虚方法和多态

C#学习系列之虚方法和多态 啰嗦设计原则(六大类其中之一)基类的引用使用 共性与差异虚方法和多态的武器使用 其他总结 啰嗦 基础学习。 设计原则(六大类其中之一) **依赖倒置原则:**依赖抽象类,不依赖具体…

通过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强、湘商回归突出贡…

网络综合和简化实频理论学习概述

0、网络综合和简化实频理论学习概述 1、电路综合原理与实践—电抗函数的综合原理 介绍了策动点阻抗函数的综合方法(考尔Ⅰ型和Ⅱ型、福斯特Ⅰ型和Ⅱ型、考尔Ⅰ型和Ⅱ型),并给出了基于策动点阻抗函数的综合示例和Matlab代码 2、电路综合原理…

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

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

useEffect如何模拟生命周期?

文章目录 前言介绍后言 前言 hello world欢迎来到前端的新世界 😜当前文章系列专栏:react.js 🐱‍👓博主在前端领域还有很多知识和技术需要掌握,正在不断努力填补技术短板。(如果出现错误,感谢大家指出)&am…

hdlbits系列verilog解答(优化32位加法器)-27

文章目录 一、问题描述二、verilog源码三、仿真结果一、问题描述 行波进位加法器(参见前一个练习)的一个缺点是,加法器计算执行的延迟(在最坏的情况下,从最初进位开始)相当慢,并且第二级加法器在第一阶段加法器完成之前无法开始计算其执行。这会使加法器变慢。其中一项…

java读取.properties文件,通过key获取value

1.将xx.properties文件放置在src/main/resources/config目录下(config是自己建的目录) 2. 通过ApplicationHome类获取target路径 ApplicationHome applicationHome new ApplicationHome(this.getClass());String path applicationHome.getSource().ge…

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规格、尺码…

pytorch笔记:allclose,isclose,eq,equal

1 allclose 1.1介绍 torch.allclose是一个PyTorch函数,用于检查两个张量是否在某个容忍度范围内近似相等 torch.allclose(input, other, rtol1e-05, atol1e-08, equal_nanFalse)input (Tensor) – 第一个输入张量other (Tensor) – 第二个输入张量rtol (float) –…