一、标准输出和标准错误
标准输出和标准错误对应的都是显示器文件,其内容都会打印到显示器上。那么标准输出和标准错误有什么区别呢?标准输出和标准错误都打印到显示器上,我们怎么区分哪些是标准输出打印的信息,哪些是标准错误打印的信息呢?
我们用一段代码来对比一下标准输出和标准错误的区别:
我们分别往stdout文件和stderr文件里写入内容,标记为[1]号的内容是写入到stdout文件里的,标记为[2]号的内容是写入到stderr文件里的。
运行程序查看结果:
我们可以看到,向stdout文件写入的内容和向stderr文件写入的内容都打印到了显示器上。
输入指令:./myfile > stdout.txt
即将内容重定向到stdout.txt文件里,我们会发现结果只有标准输出文件里的内容被写入到了stdout.txt中,而标准错误文件里的内容并没有被写入,依然是打印在显示器上。
这个现象解释起来非常简单,我们的指令./myfile > stdout.txt
默认是将标准输出文件里的内容进行重定向,完整的指令应该是:./myfile 1 > stdout.txt
.
如果我们想要同时将标准输出文件重定向到一个新的文件,将标准错误文件重定向到另一个新的文件,应该输入这个指令:./myfile > stdout.txt 2>stderr.txt
,此时就能将标准输出的内容和标准错误的内容分开到两个不同的文件里了。
如果我们就想要将标准输出和标准错误的内容都重定向到一个文件里,那我们需要使用这个指令:./myfile > all.txt 2>&1
二、文件系统
我们前面介绍过,在内存中的文件都是被打开的文件,我们一直进行的文件操作也是针对被打开文件的,但在磁盘上有大量的没有被打开的文件,这些文件就存储在磁盘里。所以对于文件系统的了解,我们不能还把视角放在内存上,而是应该把视角迁移到硬盘上。
1.磁盘的物理结构
如下是磁盘的内部结构图,磁盘的主轴串联着一摞盘片,每一个盘片都有两面,两面都可以存放数据,我们存储在磁盘上的数据就是在这个地方。传动轴的一端有磁头,磁头是在盘片上方的(并不与盘面接触),一方面盘片在旋转,另一方面磁头在摆动,盘片旋转决定的是磁头访问到的哪一块区域,磁头摆动决定的是访问盘片的内侧还是外侧,这就是磁盘的寻址过程。并且每一个盘面都配备一个磁头(即一个盘片的正反面都有磁头)。