上一节基础IO我们着重理解了重定向与缓冲区,这节我们需要重点理解文件再磁盘中是怎样存储。以及上一节我们没有涉及到的知识。
stderr到时有什么用?
目录
- fd-> 0 1 2:
- 初步理解2
- 怎样将错误与正确输出都打印在一个文件?
- 文件在硬盘的存取:
- 磁盘的样子:
fd-> 0 1 2:
为什么我们的C语言要有fd为0 1 2的文件标识符呢。
我们知道0 是键盘,1 与 2是屏幕。
为什么1与2都是屏幕还要有两个ne?
我们一一来说。
首先对于0 与 1:
我们写的程序无非就是对数据进行处理(计算,存储…)
而这个过程也势必要被我们用户进行动态观察,方便我们与计算机的交互,这是自Unix操作系统出现时就约定成俗的,一直延续到现在,是历史原因
造成的。
那么0与1容易理解,2如何理解呢?
初步理解2
我们先来看一段代码:
代码现象:
我们发现直接运行时会正常打印,但是重定向并没有全部重定向到log.txt中,向stderr中打印的仍旧在显示器上显示了。
所以,重定向的全名叫做标准输出重定向
,完整写法是./myexe 1>log.txt
,也就是只针对stdout这个流。
那么2存在的原因是什么?
当我们想查看一个程序的错误信息
时,只需要重定向一下即可,可以加快我们的debug!
怎样将错误与正确输出都打印在一个文件?
将IO改一下,方便观看,多重复复制了一些打印语句。
我们先来看这样一个操作:
这样的操作容易理解。
那么这个操作呢?
我们分别理解一下:
对于第一种:
那么第二种是怎么理解?
2>&1
:是对1取地址将1的内容给2。
现在我们回想一下在实现诗句结构时,我们经常使用的perror函数,他的本质就是想stderr中打印。
我们的C++中除了cin cout,也有cerror函数,本质也是想stderr中打印。
所以,C++中的cerror和cout就像C的printf与perror!
文件在硬盘的存取:
在开始之前我们先普及一个概念,计算机只认识二进制,那么二进制有什么表现形式?有高低电平,像磁铁的南北极也可以代表0与1…
所以二进制在物理层面有不同的表现形式。
磁盘的样子:
持续更新…