分类: 系统运维
2012-03-28 12:48:01
对内核来说,所有打开的文件都能用文件描述符来引用。一个文件描述符是一个非负整数。当我们打开一个已经存在的文件或创建一个新的文件,内核会返回一个文
件描述符给进程。当我们想读或者写一个文件时,我们用open或create返回的文件描述符来标识这个文件,作为read或write的参数。
根据协定,UNIX系统外壳把文件描述符0与一个进程的标准输入关联,文件描述符1与标准输出关联,而文件描述符2与标准错误关联。这个协定被各个外壳以及很多应用程序使用。它不是UNIX内核的特性。尽管如此,如果这些相联没有的话,许多程序都会崩溃。
在POSIX程序里,魔数0、1和2应该用符号常量STDIN_FILENO、STDOUT_FILENO和STDERR_FILENO代替。这些常量在
文件描述符的取值范围从0到OPEN_MAX。早期的UNIX系统实现有19的上限,允许每个进程最多打开20个文件,但是许多系统把这个限量增加为63。
在FreeBSD 5.2.1、Mac OS X 10.3和Solaris 9,这个限量本质上是无限的,由系统内存量、整型大小和任何由系统管理员配置的软硬限量来界定。Linux 2.4.22对每个进程 的文件描述符数量给了一个硬性限量1,048,576。