文件描述符和文件系统

对文件描述符的理解:

  • 文件描述符,操作系统通过一个整数代表打开的文件,将这个整数称为~。

  • 文件流指针用于库函数操作io文件

  • 文件描述符用于系统调用接口操作函数

  • 文件流指针的结构体里面的一个成员就是文件描述符

进程如何通过文件一个数字(文件描述符)来操作文件呢?
每个PCB 有个指针file*指向一个文件结构体,里面有个数组指针,而数组中的每个与元素则是存放打开文件的指针file*
文件描述符就是进程pcb中file_stuct结构体中数组的下标
这里写图片描述
file 结构体中除了有一个成员是文件描述符,结构体中还有用户态的缓冲区

文件描述符分配规则:

文件描述符的分配是有限的,因为它就是下标,所以文件打开一定要关闭

分配规则:每次找未使用的最小位

重定向

将(文件描述符)下标所对应的文件描述替换成另外一个文件描述)
例如原本指向 test.txt,用dup2重新指向test.fd
这里写图片描述这里写图片描述

标准输入输出重定向:

标准输入重定向:原本从标准输入读取数据重新定向为从其他文件读取数据
标准输出重定向:把原来要输出的标准内容(输出到屏幕),重新定向后输出到指定的文件当中。

  1. 标准输入重定向(很少用)
    <
  2. 标准输出重定向
     清空原有内容后添加新内容 <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时,文件就真的删除了,释放节点和数据区

两者区别:

  1. 软连接有自己的inode结点,硬链接的inode号,与源文件的相同
  2. 软连接可以对目录进行操作(比如创建),硬链接不可以
    3 删除源文件对硬链接文件没有影响,只是inode中的链接数-1,对软连接有影响,软连接将断开,就找不到文件
  3. 硬链接不能跨分区建立但连接可以

有几个文件名对应着同一个incode,就叫硬链接几,比如有两个文件对应着同一个incode,就叫软连接2

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
文件描述符(File Descriptor)和系统调用号(System Call)是两个不同的概念,用于在操作系统中进行文件操作和系统调用。 1. 文件描述符(File Descriptor): 文件描述符是一个非负整数,用于标识打开的文件或其他输入/输出资源。在大多数操作系统中,文件描述符的值从0开始,表示标准输入(stdin);1表示标准输出(stdout);2表示标准错误(stderr)。其他文件描述符的值可以通过打开文件或创建网络连接等操作获得。 文件描述符在进行文件操作时非常重要。例如,可以使用文件描述符来读取或写入文件数据,关闭文件等。 2. 系统调用号(System Call Number): 系统调用是操作系统提供给应用程序的接口,用于执行各种操作,如文件操作、进程管理、网络通信等。每个系统调用都有一个唯一的系统调用号,用于标识要执行的操作。 操作系统会为每个系统调用分配一个特定的系统调用号,应用程序可以使用该号码来请求相应的操作。例如,在Linux中,读取文件的系统调用是read,它的系统调用号是0;写入文件的系统调用是write,它的系统调用号是1。 需要注意的是,文件描述符和系统调用号是两个不同的概念。文件描述符用于标识打开的文件或其他资源,而系统调用号用于标识要执行的操作。在进行文件操作时,应用程序通常会使用文件描述符作为参数传递给相应的系统调用,以便进行读写、关闭等操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值