檔案描述符概述

2021-08-30 23:25:01 字數 2108 閱讀 6168

檔案描述符概述

核心(kernel)利用檔案描述符(file descriptor)來訪問檔案。檔案描述符是非負整數。開啟現存盤案或新建檔案時,核心會返回乙個檔案描述符。讀寫檔案也需要使用檔案描述符來指定待讀寫的檔案。

習慣上,標準輸入(standard input)的檔案描述符是 0,標準輸出(standard output)是 1,標準錯誤(standard error)是 2。儘管這種習慣並非 unix 核心的特性,但是因為一些 shell 和很多應用程式都使用這種習慣,因此,如果核心不遵循這種習慣的話,很多應用程式將不能使用。

posix 定義了 stdin_fileno、stdout_fileno 和 stderr_fileno 來代替 0、1、2。這三個符號常量的定義位於標頭檔案 unistd.h。

檔案描述符的有效範圍是 0 到 open_max。一般來說,每個程序最多可以開啟 64 個檔案(0 — 63)。對於 freebsd 5.2.1、mac os x 10.3 和 solaris 9 來說,每個程序最多可以開啟檔案的多少取決於系統記憶體的大小,int 的大小,以及系統管理員設定的限制。linux 2.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常數來定義。

檔案描述符概述

檔案描述符是非負整數,是檔案的標識。使用者使用檔案描述符 file descriptor 來訪問檔案。利用open開啟乙個檔案時,核心會返回乙個檔案描述符。每個程序都有一張檔案描述符的表,程序剛被建立時,標準輸入 標準輸出 標準錯誤輸出裝置檔案被開啟,對應的檔案描述符0 1 2 記錄在表中。在程序中...

mysql 檔案描述符 檔案描述符

toc 首先,linux的世界裡一切皆為檔案,無論是裝置還是乙個socket連線。檔案又可分為 普通檔案 目錄檔案 鏈結檔案和裝置檔案。檔案描述符 file descriptor 是核心為了高效管理已被開啟的檔案所建立的索引,其是乙個非負整數 通常是小整數 用於指代被開啟的檔案,所有執行i o操作的...

檔案描述符

檔案描述符 是個很小的正整數,它是乙個索引值,指向核心為每乙個程序所維護的該程序開啟檔案的記錄表。檔案描述符的優點 相容posix標準,許多 linux 和unix 系統呼叫都依賴於它。檔案描述符的缺點 不能移植到unix以外的系統上去,也不直觀。基於檔案描述符的輸入輸出函式 open 開啟乙個檔案...