Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1477775
  • 博文数量: 842
  • 博客积分: 12411
  • 博客等级: 上将
  • 技术积分: 5772
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-14 14:43
文章分类

全部博文(842)

文章存档

2013年(157)

2012年(685)

分类: LINUX

2012-05-28 10:27:25

各个进程的文件描述符都是相互独立的。举个形象的说法,描述符是局部变量,它的作用域就是一个进程上下文。
不同的进程中,进程描述符可以有相同的值,例如都为4,而其指向的是不同的打开文件。在不同进程中同样对进程描述符4进行操作,其操作的基本都是不同的文件,除非两个进程打开的是同一个文件且分配的文件描述符都是4。
描述符的分配在各进程中是独立进行的,进程之间相互不会影响(但进程内文件描述符是唯一的,不会出现相同值的文件描述符)。描述符是在打开文件时动态分配 的,一般都是分配本进程未正在使用的,最小的数字,当然0、1、2是默认已经打开分配的描述符,分别对应标准输入、输出、出错,都是指向终端的。所以,第 一个手动打开文件会分到3,依次向上增加。使用过、被关闭释放的文件描述符也在选择之列。
对于,希望不同文件描述符对应同一个打开文件,就要用到dup的文件描述符复制函数了。
/dev/fd目录下看到的是当前进程的所有打开的文件的文件描述符对应的文件,用不同的进程打开该目录,看到的会是不同的内容。但我们发现描述符是连续的,也就印证了前面说的最小可用分配。
  inode 或i节点是指对文件的索引。如一个系统,所有文件是放在磁盘或flash上,就要编个目录来说明每个文件在什么地方,有什么属性,及大小等。就像书本的目 录一样,便于查找和管理。这目录是操作系统需要的,用来找文件或叫管理文件。许多操作系统都用到这个概念,如linux, 某些嵌入式文件系统等。当然,对某个系统来说,有许多i节点。所以对i节点本身也是要进行管理的。

 

    在linux中,内核通过inode来找到每个文件,但一个文件可以被许多用户同时打开或一个用户同时打开多次。这就有一个问题,如何管理文件的当前位 移量,因为可能每个用户打开文件后进行的操作都不一样,这样文件位移量也不同,当然还有其他的一些问题。所以linux又搞了一个文件描述符(file descriptor)这个东西,来分别为每一个用户服务。每个用户每次打开一个文件,就产生一个文件描述符,多次打开就产生多个文件描述符,一一对应, 不管是同一个用户,还是多个用户。该文件描述符就记录了当前打开的文件的偏移量等数据。所以一个i节点可以有0个或多个文件描述符。多个文件描述符可以对 应一个i节点。


阅读(1360) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~