UNIX技术疑问:i-number与文件描述符是否为同一概念?
文件描述符与i-number的区别
结论:文件描述符绝对不是i-number,二者是完全不同的概念
结合论文提及的要点,具体区别可以拆解为:
- i-number是文件系统级的唯一标识:它是目录条目里指向文件的整数指针,属于文件本身的元数据——只要文件存在,不管有没有进程打开它,i-number都固定存在,用来在文件系统中定位文件的实际数据和元信息。
- 文件描述符是进程级的引用标识:它是
open/create调用返回的小整数,本质是进程内部文件描述符表的索引。每个进程有独立的描述符表,同一个文件被不同进程打开会得到不同的描述符;就算同一个进程多次打开同一个文件,也会生成不同的描述符。 open/create的作用是建立二者的关联:这两个系统调用会先把用户输入的路径名解析成对应的i-number,然后在当前进程的描述符表里新增一个条目,关联这个i-number对应的文件,最后返回这个条目的索引(也就是文件描述符)。简单说,文件描述符是进程用来快速访问已打开文件的“入口”,背后关联的是i-number,但本身和i-number不是一回事。
内容的提问来源于stack exchange,提问作者Tabish Mir
相关产品推荐
相关产品推荐

