2012-09-25 36 views
1

Linux文件描述符的「值」是否始終小於打開的文件限制?Linux文件描述符的值是否總是小於打開的文件限制?

理論上,系統應重新使用封閉文件描述符的標識值。在一個進程中打開1021個文件後,默認情況下,我應該得到的文件描述符值範圍從0,1,2到1023。如果我想打開另一個文件,我必須釋放一些帶有close的文件描述符,並且當我再次調用open時,系統將重新使用這些已發佈的標識。所以在這種情況下,文件描述符的最大整數值應該是1023。那是對的嗎 ?

我知道我可以用ulimit -nsetrlimit/proc/sys/fs/file-max更改打開的文件限制。我只想知道,如果我已使用setrlimit將打開的文件限制減少到128,那麼我是否可以使用char變量存儲打開的套接字文件描述符。

回答

3

是的,值被限制在0到1之間的範圍內,小於getrlimit()返回的當前限制。

From the getrlimit() man page:

RLIMIT_NOFILE 
      Specifies a value one greater than the maximum file descriptor number 
      that can be opened by this process. Attempts (open(2), pipe(2), 
      dup(2), etc.) to exceed this limit yield the error EMFILE. 
      (Historically, this limit was named RLIMIT_OFILE on BSD.) 

From the Open Group Base Specification:

RLIMIT_NOFILE
這是一個數大於最大值,該系統可以分配給新創建的描述符。如果超出此限制 ,則分配文件描述符的函數將失敗,並將 errno設置爲[EMFILE]。此限制限制了進程可能分配的文件描述符的數量。

+0

謝謝。我的電腦上的getrlimit()的手冊頁僅顯示「RLIMIT_NOFILE:此進程打開文件的最大數量。」 – RichardLiu