先补充一些小知识
为什么会有0,1,2,以及0,1,2的作用是什么
在我们写程序的时候,本质上都是在对数据进行处理(计算、存储),而0,1,2的出现,就涉及到一个问题,在处理数据的过程中人们要不要看到这个过程,所以就会有了0(标准输入),1(标准输出),2(标准错误)
首先0的作用就是标准输入,我们可以把从scanf,get等代码中获取到的字符存放到一个缓冲区,这个地方就是0。那么1和2他究竟是什么?我们可以做一个实验
我们可以看到,好像在这个方面上,他们好像是没什么区别,这确实是没毛病,因为程序会默认打开标准错误和标准输出,然后标准错误和标准输出对应的都是显示器
那如果我们把他输出重定向到log.txt呢?会发现这个时候,他把输出到显示器上面的内容重定向到log.txt了。
这是为什么呢?
因此结论就是,当我们做重定向的时候,Linux只会改变标准输出的重定向,并不会改变标准错误的重定向。
那么2的作用到底是什么呢?
我们在编写代码的过程中,总是会有输出正确信息和错误信息,而这两种信息通常都只会输出到标准输出中,而2的出现,就可以使得我们可以把正确信息和错误信息分类开来,正确信息输出到标准输出中,错误信息输出到标准错误中,方便我们对代码的管控和观察
而如果我想把正确的消息放到一个文件,错误的消息放到另一个文件,我就可以这样做
那如果我想把所有的消息都打印到一个文件里面,该怎么做?
这个的原理来简单说一下
首先一开始1和2都默认指向显示器
然后让1指向all.txt
而后面的2>&1是什么意思呢?
就是把1的地址拷贝到2上面,由于1和2的地址一样,所以此时2的指向也被改变了
ok接下来就到了我们的正题
1.文件打开之前是什么样子的?
每一个文件在打开之前,都是被存储到磁盘里面的,那磁盘是什么呢?
一个磁盘(如一个 1T 的机械硬盘)由多个盘片叠加而成。盘片的表面涂有磁性物质,这些磁性物质用来记录二进制数据。因为正反两面都可涂上磁性物质,故一个盘片可能会有两个盘面。
磁道、扇区
每个盘片被划分为一个个磁道,每个磁道又划分为一个个扇区。其中,最内侧磁道上的扇区面积最小,因此数据密度最大。
柱面
每个盘面对应一个磁头。所有的磁头都是连在同一个磁臂上的,因此所有磁头只能“共进退”。所有盘面中相对位置相同的磁道组成柱面。
2.那我们又如何找到指定的扇区?
1.找到对应的磁头(Head)
2.找到指定的磁道(Cylinder)
3.找到指定的扇区(Sector)
这个被称为CHS定址法
3.对磁盘的存储进行逻辑抽象
对于磁盘,我们可以把他抽象成一个巨大的线性结构
我们可以惊奇的发现,当我们抽象出来一个线性结构的时候,其中的每一格都是一个扇区,这就相当是说得到了一个数组 sector disk_array[N],而每一个sector就是数组的下标
我们因此可以得出,操作系统就可以通过获取下标来定位到某个指定的扇区。
但是对于硬件上来说,他们需要的是CHS地址,也就是说,我们需要把下标转换成CHS地址
该怎么去转换呢?
我们首先举个例子,一个线性结构有1000个扇区,10个磁道,那么就是每个磁道有100个扇区
我们就可以这样来计算出CHS的地址