您现在的位置是:首页 > 电脑技术查询 > 电脑知识

文件描述符

编辑:chaxungu时间:2022-09-28 09:34:56分类:电脑知识

文件描述符概述
  内核(kernel)利用文件描述符(filedescriptor)来访问文件。文件描述符是非负整数。打开现存文件或新建文件时,内核会返回一个文件描述符。读写文件也需要使用文件描述符来指定待读写的文件。

  习惯上,标准输入(standardinput)的文件描述符是0,标准输出(standardoutput)是1,标准错误(standarderror)是2。尽管这种习惯并非unix内核的特性,但是因为一些shell和很多应用程序都使用这种习惯,因此,如果内核不遵循这种习惯的话,很多应用程序将不能使用。

  posix定义了stdin_fileno、stdout_fileno和stderr_fileno来代替0、1、2。这三个符号常量的定义位于头文件unistd.h。

  文件描述符的有效范围是0到open_max。一般来说,每个进程最多可以打开64个文件(0—63)。对于freebsd5.2.1、macosx10.3和solaris9来说,每个进程最多可以打开文件的多少取决于系统内存的大小,int的大小,以及系统管理员设定的限制。linux2.4.22强制规定最多不能超过1,048,576。

  文件描述符是由无符号整数表示的句柄,进程使用它来标识打开的文件。文件描述符与包括相关信息(如文件的打开模式、文件的位置类型、文件的初始类型等)的文件对象相关联,这些信息被称作文件的上下文。

如何创建文件描述符  进程获取文件描述符最常见的方法是通过本机子例程open或create获取或者通过从父进程继承。后一种方法允许子进程同样能够访问由父进程使用的文件。文件描述符对于每个进程一般是唯一的。当用fork子例程创建某个子进程时,该子进程会获得其父进程所有文件描述符的副本,这些文件描述符在执行fork时打开。在由fcntl、dup和dup2子例程复制或拷贝某个进程时,会发生同样的复制过程。

  第二个异常在jvm进程缺乏文件描述符时出现(尽管在执行forkandexec()子例程时乧需要新的文件描述符来复制父进程的文件描述符)。对于每个进程,操作系统内核在u_block结构中维护文件描述符表,所有的文件描述符都在该表中建立索引。

如何在不同平台上定义文件描述符的数量
  文件描述符极限以及可分配给进程的最大大小由资源限制来定义。这些值应当按照在weblogicserver文档中建议的、特定于操作系统的文件描述符值来设置:

  对于wls8.1:调整硬件、操作系统和网络性能

  对于wls7.0:调整硬件、操作系统和网络性能

  对于wls6.1:调整硬件、操作系统和网络性能

  unix和linux都有文件描述符。不过,二者的主要区别在于如何设置文件描述符的硬极限值、缺省值和配置过程。

  solaris

  /usr/bin/ulimit实用程序定义允许单个进程使用的文件描述符的数量。它的最大值在rlim_fd_max中定义,在缺省情况下,它设置为65,536。只有root用户才能修改这些内核值。

  linux

  管理用户可以在etc/security/limits.conf配置文件中设置他们的文件描述符极限,如下例所示。

  softnofile1024

  hardnofile4096

  系统级文件描述符极限还可以通过将以下三行添加到/etc/rc.d/rc.local启动脚本中来设置:

  #increasesystem-widefiledescriptorlimit.

  echo4096>/proc/sys/fs/file-max

  echo16384>/proc/sys/fs/inode-max

  windows

  在windows操作系统上,文件描述符被称作文件句柄。在windows2000服务器上,打开文件的句柄极限设置为16,384。此数量可以在任务管理器的性能摘要中监视。

  hp-ux

  nfile定义打开文件的最大数量。此值通常由以下公式来确定:((nproc*2)+1000),其中nproc通常为:((maxusers*5)+64)。如果maxusers等于400,则经过计算得到此值为5128。通常可以将此值设高一些。maxfiles是每个进程的软文件极限,maxfiles_lim是每个进程的硬文件极限。

  aix

  文件描述符极限在/etc/security/limits文件中设置,它的缺省值是2000。此极限可以通过ulimit命令或setrlimit子例程来更改。最大大小由open_max常数来定义。

上一篇:dream scene

下一篇:三合万年历v1.0.3