學號:19021211263
linux中, 每一個進程在內核中,都對應有一個“打開文件”數(shù)組,存放指向文件對象的指針,而 fd 是這個數(shù)組的下標。
? 我們對文件進行操作時,系統(tǒng)調用,將fd傳入內核,內核通過fd找到文件,對文件進行操作。
? 既然是數(shù)組下標,fd的類型為int, < 0 為非法值, >=0 為合法值。在linux中,一個進程默認可以打開的文件數(shù)為1024個,fd的范圍為0~1023。可以通過設置,改變最大值。
? 在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/
更多有趣內容歡迎訪問我的個人博客。