1.stderr
stderr文件默认的文件标识符是2,指向显示器,用来输出错误信息
#include<stdio.h>
int main()
{
fprintf(stdout,"hello stdout\n");
fprintf(stderr,"hello stderr\n");
return 0;
}
stdout和stderr默认是指向显示器的,我们重定向下,
发现stdout打印到log.txt了,但是stderr还是打印到显示器上,因为我们重定向的是把文件标识符1给log.txt,而stderr的文件标识符是2,所以不影响,还是打印到显示器上,
我们还可以这样写,
把stdout文件输入到ok.txt中,把stderr输入到err.txt中,能不能把两个信息都打印到一个文件中呢?
2.磁盘理解
我们之前讨论的都是已经打开的文件,那么没有打开的文件放在哪里?磁盘,放在磁盘的文件就叫做磁盘文件,那么如何在磁盘中存储文件呢?
1.磁盘的构造
盘面:可读,可写,可擦除,两面都可以写,
2.磁盘的储存结构
磁盘读写的基本单位是扇区,大小一般是512字节,如何找到一个指定位置的扇区呢?
CHS定址法:
找到指定的磁头 Header
找到指定的磁道(柱面) Cylinder
找到指定的扇区 Sector
3.对磁盘的储存进行逻辑抽象
我们可以把磁盘抽象成一个以扇区为基本单位的线性数组,
有了扇区对应的下标,我们就可以在磁盘中找到对应的文件了,对于操作系统来说,和磁盘交互时的基本单位是4KB,也就是8个连续的扇区,这8个连续的扇区称为块,
我们可以把数组称为LBA blocks[N] ,LBA就是逻辑区块地址(Logical Blocks Address )