对文件描述符的理解:
文件描述符,操作系统通过一个整数代表打开的文件,将这个整数称为~。
文件流指针用于库函数操作io文件
文件描述符用于系统调用接口操作函数
文件流指针的结构体里面的一个成员就是文件描述符
进程如何通过文件一个数字(文件描述符)来操作文件呢?
每个PCB 有个指针file*指向一个文件结构体,里面有个数组指针,而数组中的每个与元素则是存放打开文件的指针file*
文件描述符就是进程pcb中file_stuct结构体中数组的下标
file 结构体中除了有一个成员是文件描述符,结构体中还有用户态的缓冲区
文件描述符分配规则:
文件描述符的分配是有限的,因为它就是下标,所以文件打开一定要关闭
分配规则:每次找未使用的最小位
重定向
将(文件描述符)下标所对应的文件描述替换成另外一个文件描述)
例如原本指向 test.txt,用dup2重新指向test.fd
标准输入输出重定向:
标准输入重定向:原本从标准输入读取数据重新定向为从其他文件读取数据
标准输出重定向:把原来要输出的标准内容(输出到屏幕),重新定向后输出到指定的文件当中。
- 标准输入重定向(很少用)
< - 标准输出重定向
清空原有内容后添加新内容 <br>
在原来的内容后添加新内容
ls 2>&1 >/dev/null // 2里面的内容放在1里面输出,1里面的内容放在文件/dev/null
ls >/dev/null 2>&1 // >前面数字,默认1
对 ls 2>&1 >/dev/null 解释如下图: ![这里写图片描述](https://img-blog.csdn.net/20180823152913594?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3J1b19iaW5n/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
文件系统
文件系统板块:
超级块:存放文件本身结构信息
索引块:文件在磁盘从放的位置
inode位图:在inode节点区搜索哪里有空的inode
date位图:在inode节点区搜索哪里有存放数据的空位置
inode节点区:存放文件的其他一些儿信息
数据区:文件的内容
软连接:
如何产生:ln -s 原文件 tmp.soft(软连接文件名)
硬链接:
如何产生 ln 文件名 文件名.hard
对软连接和硬链接的理解:
软连接可看做是一个快捷方式,通过软连接文件可以找到其他位置的文件,软连接文件中保存的是所指的另一个文件的路径名,通过路径定位来定位所指文件。它针对的是一个文件名,硬链接更像是对目录项(或文件)的备份
硬链接更像是一个文件的别名,它有自己的目录项,但并没有单独的inode节点和数据区,硬链接的inode号,与源文件的相同。那么我们删除一个文件时,实际上是将inode节点的连接数-1,当链接数为0时,文件就真的删除了,释放节点和数据区
两者区别:
- 软连接有自己的inode结点,硬链接的inode号,与源文件的相同
- 软连接可以对目录进行操作(比如创建),硬链接不可以
3 删除源文件对硬链接文件没有影响,只是inode中的链接数-1,对软连接有影响,软连接将断开,就找不到文件 - 硬链接不能跨分区建立但连接可以
有几个文件名对应着同一个incode,就叫硬链接几,比如有两个文件对应着同一个incode,就叫软连接2