文件学习笔记

删除线格式 ## 文件描述符
1.文件=文件内容+文件属性。
2.文件操作=文件内容的操作+文件属性的操作。
3.所谓的“打开”文件,是指将文件的属性或内容加载到内存中—这是由冯诺依曼决定。
4.所以文件不全打开,不打开的文件放在磁盘存储。
5.内存文件(内存文件)和磁盘文件。
6.当代码运行,才是真正的对文件进行相关的操作。

1.默认文件在哪形成? 当前路径:当前进程
2.常见的记住文件属性
r读,w写,r+与w+都可以读写,当w+多了如果文件不存在多了一个文件创建的功能。a(追加写入,不断往文件新增内容,如果文件为空创建新文件)、a+
a的追加
在这里插入图片描述
在这里插入图片描述
当我们以w的方式打开文件,准备写入的时候,文件已经先被清空了。

我们向文件进行写入的时候最终是磁盘保存所以是向磁盘写入。磁盘是硬件由os提供的相关系统调用。

操作系统打开文件open头文件#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h>
open创建文件使用在这里插入图片描述
我们创建不存在的文件使用上图第二个系统函数,mode是我们赋予文件的权限。pathname文件名。如果文件存在使用2个参数的open。
在这里插入图片描述
关闭文件close
在这里插入图片描述

往文件里写入东西write在这里插入图片描述
buf是字符串的起始地址

读文件
在这里插入图片描述

3.文件清空的问题?
默认情况下文件不会被情况,我们需要在open里填入0_TRUNCl来截断清空。
在这里插入图片描述
而文件操作符从3开始,0(stdin):标准输入,键盘(stdout)1:标准输出,显示器(stderr)2.标准错误,显示器。这就是未什么fd为3的原因。
0号接口的使用:
在这里插入图片描述

在这里插入图片描述
1号接口的使用:
在这里插入图片描述

在这里插入图片描述

linux下一切皆文件:
os内的存储文件结构体由文件属性和文件方法组成。像外设它有它对应的读写方法,键盘,显示器,网卡等读写方法都不一样。进程获取时调用不同数据结构来控制对应的外设进行工作。整个结构是通过stuct_file链接起来的。每个文件有对应fd号。我们需要的时候os就去找对应的fd或者设备。很像c++的多态。(驱动控制读写)

1.文件描述符的分配规则
:从头遍历数组fd_array[]找到一个最小的,没有被使用的下标,分配给新的文件。
2.重定向的本质
在操作系统里,fd上层只认fd的id,我们在os内部,通过调整特定下标的指向,我们就可以完成重定向操作。
在这里插入图片描述
oldfd是新的fdnewfd是旧的fd。dup2(fd,1);
追加重定项 指在文件里面增加内容。

3.理解缓冲区
1.缓冲区就是一段内存
2.为什么要有缓冲区
a.解放使用缓冲区的进程时间
b缓冲区可以集中处理数据刷新,减少IO的次数,从而达到提高机子的效率。
3.缓冲区由语言提供,语言界别的缓冲区。系统级别的缓冲区会立马显示出来。

一、刷新的本质:把缓冲区的数据写到OS内部,再清空缓冲区。
二、缓冲区,是自己的fie内部进行维护,属于父进程内部的数据区域

重定向: ls -a -l > log.txt -> ls -a -l\0 logtxt
上面指令:\0前面的那部分继续进行指令分析后半部分负责打开文件重定向工作。

输入重定向
cat < log.txt
追加hello至log.xt文件
echo hello >> log.txt
在这里插入图片描述
重定向方案这边做了两次。 ./a,out 1>stdout.txt 2>stderr.txt这条指令
标准输出标准错误分开打印。由于区分程序日常输出哪些是错误。
如果不想分别打印可以采用下图命令在这里插入图片描述
./a.out > all.txt 2>&1
这命令的意思是将1的内容拷贝到all.txt里面,这是因为重定向的原因导致指向不在原来位置所以需要&。2是指向显示器,此时1和2指向同一个位置。

文件重定向原理:每个文件描述符都是一个内核中文件描述信息数组的下标,对应有一个文件的描述信息用于操作文件,而重定向就是在不改变所操作的文件描述符的情况下,通过改变描述符对应的文件描述信息进而实现改变所操作的文件

文件系统

1️⃣ 磁盘的物理结构

2️⃣ 磁盘的存储结构

3️⃣ 磁盘的逻辑抽象结构

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

华华的bit

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值