學(xué)號:19021211263
linux中, 每一個進程在內(nèi)核中,都對應(yīng)有一個“打開文件”數(shù)組睛廊,存放指向文件對象的指針,而 fd 是這個數(shù)組的下標杉编。
? 我們對文件進行操作時超全,系統(tǒng)調(diào)用,將fd傳入內(nèi)核邓馒,內(nèi)核通過fd找到文件嘶朱,對文件進行操作。
? 既然是數(shù)組下標光酣,fd的類型為int疏遏, < 0 為非法值, >=0 為合法值救军。在linux中财异,一個進程默認可以打開的文件數(shù)為1024個,fd的范圍為0~1023唱遭〈链纾可以通過設(shè)置,改變最大值拷泽。
? 在linux中庆揩,值為0俐东、1、2的fd订晌,分別代表標準輸入虏辫、標準輸出、標準錯誤輸出锈拨。在上一篇文章中砌庄,使用重定向 2>/dev/null 就是把標準錯誤輸出重定向到位桶中去,不顯示出來奕枢。因為 0 1 2已經(jīng)被linux使用了娄昆,通常在程序中打開的fd,是從3開始的缝彬。但我們在判斷一個fd是否合法時萌焰,依然要使用>=0的判斷標準。
? fd的分配原則谷浅,是從小到大扒俯,找到第一個不用的進行分配。
? 除了open之外一疯, socket編程的socket()/accept()等函數(shù)撼玄,也會返回一個fd值。
? 1)Linux系統(tǒng)下墩邀,所有進程允許打開的最大fd數(shù)量掌猛。查詢語句:
cat /proc/sys/fs/file-max
? 2)Linux系統(tǒng)下,所有進程已經(jīng)打開的fd數(shù)量及允許的最大數(shù)量眉睹。查詢語句:
cat /proc/sys/fs/file-nr
? 3)單個進程允許打開的最大fd數(shù)量.查詢語句:
ulimit -n
? 4)單個進程(例如進程id為5454)已經(jīng)打開的fd.查詢語句:
ls -l /proc/5454/fd/
更多有趣內(nèi)容歡迎訪問我的個人博客荔茬。