成人怡红院-成人怡红院视频在线观看-成人影视大全-成人影院203nnxyz-美女毛片在线看-美女免费黄

站長資訊網
最全最豐富的資訊網站

linux fd是什么

在linux中,fd全稱“File descriptor”,中文名為“文件描述符”,它是內核為了高效管理這些已經被打開的文件所創建的一種索引;它其實是一個非負整數,用于指代被打開的文件,所有執行I/O操作的系統調用都通過文件描述符來實現。

linux fd是什么

本教程操作環境:linux5.9.8系統、Dell G3電腦。

在linux中,fd全稱“File descriptor”,中文名為“文件描述符”。文件描述符是一個非負整數,本質上是一個索引值(這句話非常重要)。

Linux中的文件描述符(fd)

我們知道在Linux系統中一切皆可以看成是文件,文件又可分為:普通文件、目錄文件、鏈接文件和設備文件。在操作這些所謂的文件的時候,我們每操作一次就找一次名字,這會耗費大量的時間和效率。所以Linux中規定每一個文件對應一個索引,這樣要操作文件的時候,我們直接找到索引就可以對其進行操作了。

文件描述符(file descriptor)就是內核為了高效管理這些已經被打開的文件所創建的索引,其是一個非負整數(通常是小整數),用于指代被打開的文件,所有執行I/O操作的系統調用都通過文件描述符來實現。同時還規定系統剛剛啟動的時候,0是標準輸入,1是標準輸出,2是標準錯誤。這意味著如果此時去打開一個新的文件,它的文件描述符會是3,再打開一個文件文件描述符就是4……

Linux內核對所有打開的文件有一個文件描述符表格,里面存儲了每個文件描述符作為索引與一個打開文件相對應的關系,簡單理解就是下圖這樣一個數組,文件描述符(索引)就是文件描述符表這個數組的下標,數組的內容就是指向一個個打開的文件的指針。linux fd是什么

上面只是簡單理解,實際上關于文件描述符,Linux內核維護了3個數據結構

  • 進程級的文件描述符表
  • 系統級的打開文件描述符表
  • 文件系統的i-node表

一個 Linux 進程啟動后,會在內核空間中創建一個 PCB 控制塊,PCB 內部有一個文件描述符表(File descriptor table),記錄著當前進程所有可用的文件描述符,也即當前進程所有打開的文件。進程級的描述符表的每一條記錄了單個進程所使用的文件描述符的相關信息,進程之間相互獨立,一個進程使用了文件描述符3,另一個進程也可以用3。除了進程級的文件描述符表,系統還需要維護另外兩張表:打開文件表、i-node 表。這兩張表存儲了每個打開文件的打開文件句柄(open file handle)。一個打開文件句柄存儲了與一個打開文件相關的全部信息。

系統級的打開文件描述符表:

  • 當前文件偏移量(調用read()和write()時更新,或使用lseek()直接修改)
  • 打開文件時的標識(open()的flags參數)
  • 文件訪問模式(如調用open()時所設置的只讀模式、只寫模式或讀寫模式)
  • 與信號驅動相關的設置
  • 對該文件i-node對象的引用,即i-node 表指針

文件系統的i-node表:

  • 文件類型(例如:常規文件、套接字或FIFO)和訪問權限
  • 一個指針,指向該文件所持有的鎖列表
  • 文件的各種屬性,包括文件大小以及與不同類型操作相關的時間戳

文件描述符、打開的文件句柄以及i-node之間的關系如下圖:

linux fd是什么

  • 在進程 A 中,文件描述符 1 和 20 都指向了同一個打開文件表項,標號為 23(指向了打開文件表中下標為 23 的數組元素),這可能是通過調用 dup()、dup2()、fcntl() 或者對同一個文件多次調用了 open() 函數形成的。
  • 進程 A 的文件描述符 2 和進程 B 的文件描述符 2 都指向了同一個文件,這可能是在調用 fork() 后出現的(即進程 A、B 是父子進程關系),或者是不同的進程獨自去調用 open() 函數打開了同一個文件,此時進程內部的描述符正好分配到與其他進程打開該文件的描述符一樣。
  • 進程 A 的描述符 0 和進程 B 的描述符 3 分別指向不同的打開文件表項,但這些表項均指向 i-node 表的同一個條目(標號為 1976);換言之,它們指向了同一個文件。發生這種情況是因為每個進程各自對同一個文件發起了 open() 調用。同一個進程兩次打開同一個文件,也會發生類似情況。

這就說明:同一個進程的不同文件描述符可以指向同一個文件;不同進程可以擁有相同的文件描述符;不同進程的同一個文件描述符可以指向不同的文件(一般也是這樣,除了 0、1、2 這三個特殊的文件);不同進程的不同文件描述符也可以指向同一個文件。

Linux上打開文件舉例

比如在Linux上用 vim test.py 打開一個文件,保持打開狀態,再新打開一個新的shell,輸入命令pidof vim 獲取vim進程的pid號,然后 ll /proc/$pid/fd 查看vim 進程所使用的文件描述符列表。

linux fd是什么

/dev/pts是遠程登陸(telnet,ssh等)后創建的控制臺設備文件所在的目錄。因為我是通過Xshell遠程登錄的,所以標準輸入0,標準輸出1,標準錯誤2的文件描述符都指向虛擬終端控制臺 /dev/pts/6 。再看下面是新打開的 test.py 的文件描述符,竟然是4,說好的從3開始呢?

這個我也困擾了好久,查了各種資料,終于在一個大佬的幫助下在一個論壇找到原因,有時候中文查不到還是要試試英文搜索啊。因為vim這種編輯器的原理是先打開源文件并拷貝,然后關閉源文件再打開自己的副本,修改完文件保存的時候直接將副本重命名覆蓋源文件。所以打開源文件的時候用的文件描述符3,然后打開自己的副本是時候就該用文件描述符4了,然后關閉源文件,文件描述符3就被釋放了,我們查看的時候就只剩下了4,這里它指向的是vim創建的副本文件。這里只是說個大概意思,具體深究要去深入了解一下 vim的實現原理——奧爾特星云大使,下面是當時我看到的論壇上的資料截圖,鏈接在這:StackOverFlow。

linux fd是什么

如果不相信可以試一試別的進程,比如 tail。

在Linux上用 tail -f test.py 打開一個文件,保持打開狀態,再新打開一個新的shell,輸入命令pidof tail 獲取tail進程的pid號,然后 ll /proc/$pid/fd 查看tail進程所使用的文件描述符列表,可以看到文件描述符確實是從3開始使用的。tail不是編輯器不存在修改文件的情況,所以直接文件描述符直接打開的源文件。實際上可以使用 ll /proc/$pid/fd 命令獲取當前運行的任意進程的文件描述符使用情況。

linux fd是什么

擴展知識:Linux配置系統最大打開文件描述符個數

(1)系統級限制

理論上系統內存有多少就可以打開多少的文件描述符,但是在實際中內核是會做相應的處理,一般最大打開文件數會是系統內存的10%(以KB來計算),稱之為系統級限制。這個數字可以通過 cat /proc/sys/fs/file-max 或者 sysctl -a | grep fs.file-max 命令查看。

linux fd是什么

更改系統級限制有臨時更改和永久更改兩種方式:

  • 臨時更改:session斷開或者系統重啟后會恢復原來的設置值。使用命令 sysctl -w fs.file-max=xxxx,其中xxxx就是要設置的數字。

  • 永久更改:vim編輯 /etc/sysctl.conf 文件,在后面添加 fs.file-max=xxxx,其中xxxx就是要設置的數字。保存退出后還要使用sysctl -p 命令使其生效。

(2)用戶級限制

同時為了控制每個進程消耗的文件資源,內核也會對單個進程最大打開文件數做默認限制,即用戶級限制。32位系統默認值一般是1024,64位系統默認值一般是65535,可以使用 ulimit -n 命令查看。

linux fd是什么

更改用戶級限制也有臨時更改和永久更改兩種方式:

  • 臨時更改:session斷開或者系統重啟后會恢復原來的設置值。使用命令 ulimit -SHn xxxx 命令來修改,其中xxxx就是要設置的數字。

  • 永久更改:vim編輯 /etc/security/limits.conf 文件,修改其中的 hard nofile xxxxsoft nofile xxxx,其中xxxx就是要設置的數字。保存后退出。關于hard和soft的區別,參照下面參考鏈接中的第5個。

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
熟妇女人妻丰满少妇中文字幕性生活| 欧美综合自拍亚洲综合图片区| 粗大从后面狠狠贯穿H| 人妻妺妺窝人体色WWW仙踪林| 激情国产AV做激情国产爱| 粉嫩av一区二区精品爆乳| 99在线精品一区二区三区| 一本无码字幕在钱少妇人妻| 性生生活20分钟免费| 日本老肥婆BBBWBBBWZR| 欧美成人A天堂片在线观看| 久久久久国色AV免费观看| 国产午夜精品无码理论片| 丰满熟妇大号BBWBBWBBW| 波多野结衣AV高清一区二区三区| 18禁动漫无码无遮挡免费看| 亚洲综合国产一区二区三区| 亚洲 日韩 欧美 成人 在线| 亚洲精品国产精品乱码视色 | 久久精品中文字幕无码| 国产又爽又黄又舒服又刺激视频| 国产 在线 | 日韩| 成年美女黄网站色大免费视频| 99久久综合狠狠综合久久| 草莓视频免费观看| 国产日韩欧美亚欧在线| 寡妇好丰满奶好大| 国产性自爱拍偷在在线播放| 久久久久国色AV免费看| 欧美劲爆精品白浆视频网站| 妺妺窝人体色www聚色窝仙踪| 精品久久久久久久久中文字幕| 国产日韩AV免费无码一区二区三 | 欧美熟女一区二区三区| 男女无遮挡高清视频免费看| 麻花豆传媒剧国产MV在线观看| 久久久久久成人毛片免费看 | 最新亚洲人成网站在线观看| 亚洲中文字幕无码一区二区三区| 91精品人妻一区二区三区| 1688.COM成品网站入口| 丰满多毛的大隂户毛茸茸| 激情爆乳一区二区三区| 欧美人与禽交片在线观看| 人伦片无码中文字| 人妻丰满AV中文久久不卡| 性丰满ⅩXXOOOZZXXHD| 午夜无码免费福利视频网址| 香港三日本三级少妇三级视频| 野花高清在线观看免费3| 亚洲综合色区另类AV| 边做饭边被躁BD小说| 狠狠澡人人添人人爽人妻少妇 | 麻豆传播媒体APP大全免费版| 麻豆av无码人妻一区二区三区| 日韩AⅤ无码AV一区二区三区| 少妇精品久久久一区二区| 色噜噜狠狠狠狠色综合久一| 天堂中文А√在线| 亚洲AV中文无码乱人伦| 亚洲欧美一区二区三区| 中文字幕AV无码一区二区三区电| 中文在线っと好きだっ最新版| 国产成人MV在线播放| 国产色在线 | 日韩| 久久国产精品二国产精品| 久久影院九九被窝爽爽| 欧美成人片一区二区三区| 性刺激性色爽爱小说| CHINESEHD国产精品麻豆| 丰满少妇大力进入| 巨大黑人一级毛片| 人妻出轨无码AV| 亚洲精品自偷自拍无码| 18禁网站在线永久免费观看| 国产毛片毛多水多的特级毛片| 久99久精品免费视频热| 麻豆一二三四区乱码| 午夜福利理论片高清在线观看| 亚洲区激情区无码区| 疯狂做受XXXX高潮国产| 黑料吃瓜网998.SU永久有效 | 欧美精品18VIDEOS性欧美| 亚洲精品乱码久久久久久V| 丰满少妇猛烈进入无码人妻| 女儿的朋友5中汉字晋通话| 日日狠狠久久偷偷色综合96蜜桃 | 国产午夜精品久久精品电影| 人人插人人操人人射av网| 香蕉国产成版人视频APP| CHINA东北女人对话过瘾| 久久精品亚洲一区二区三区浴池| 无码精品人妻 中文字幕| 野花视频在线观看| 国产探花在线精品一区二区| 日韩精品人妻系列无码专区免费| 中文字幕AV无码人妻| 精品少妇人妻AV免费久久洗澡| 欧美老熟妇乱XXXXX| 亚洲中文久久久久久精品| 国产无套内射普通话对白| 上面一边亲下一边面膜使用方法| FREEⅩ性CHINESE中国| 各种少妇正面着BBW撒尿视频| 女性の乳頭を遮住する方法| 无码高潮喷吹在线播放亚洲| 边做边爱MP3在线播放免费观看| 蜜桃AV自慰久久久久免费网站| 日日狠狠久久偷偷四色综合免费| 99精品国产兔费观看久久| 国产婷婷丁香五月缴情成人网| 骚片AV蜜桃精品一区| YSL千人千色YESE88网站| 狠狠躁夜夜躁人人躁婷婷视频| 玩弄白嫩少妇XXXXX性| 最新国产精品亚洲| 久久久亚洲熟妇熟一区二区 | 乱辈通奷ⅩXXXXHD| 亚洲性色AV私人影院无码| 大屁股熟女一区二区三区| 久久不卡国产精品无码| 亚洲AV无码一区二区三区人 | 农村妇女野外交性高清片| 一面亲上边一面膜的免费| 国产JIZZJIZZ全部免费看| 秘书在办公室被躁BD在线观看| 亚洲一区二区无码偷拍| 久久精品国产亚洲AV蜜臀色欲| 舌头伸进去添的我好爽高视频| 亚洲中文欧美在线视频| 久久国产精品香蕉成人APP | 日韩人妻精品一区二区三区视频| 亚洲精品国产成人99久久| 狠狠色综合7777久夜色撩人| 亚洲不卡无码WWW一区二区三区| 国产在线无码精品电影网| 亚洲AV喷水无码XXX| 成人免费无码大片A毛片直播| 久久无码成人影片| 性饥渴的少妇AV无码影片| 国产伦理一区二区| 亚洲AV女人18毛片水真多| 幻女BBWXXXX非洲黑人| 亚洲人成绝费网站色WWW吃脚| 久久久国产精品ⅤA麻豆| 游泳教练在水里含我奶小说| 国产一级 片内射30岁老熟女| 性色欲情网站IWWW| 极品妇女扒开粉嫩小泬| 亚洲中文成人中文字幕| 蜜桃国产乱码精品一区二区三区w 蜜桃国产乱码精品一区二区三区 蜜桃国产精品乱码一区二区三区 蜜桃传媒在线观看免费版7 | 在线观看高H无码黄动漫| 国产亚洲婷婷香蕉久久精品| 亚洲VA国产VA天堂VA久久| 九九久久精品国产| 中国老太婆BB无套内射| 精品久久亚洲中文无码| 一本色道久久综合狠狠躁篇| 免费视频成人片在线观看| 把八重神子焯出白水怎么办| 蜜桃视频一区二区| XXXX性×XX老少配| 私人微信放款24小时在线| 国产做国产爱免费视频| 玩弄丰满奶水的女邻居| 狠狠色噜噜狠狠狠8888米奇 | 天天狠天天透天天爱综合| 国产午夜精品免费一区二区三区 | JK制服白丝自慰出水| 老头老太太GMBGMBGM| 亚洲男人第一无码AV网站| 老头猛的挺进她莹莹的体导演是谁| AV无码国产在线看免费APP| 免费真人视频网站直播下载| 班长哭了能不能再抠游戏里面的钱| 天堂AV男人在线播放| 高清国产天干天干天干| 亚洲AV无码成人影院一尤物区| 国产乱AⅤ一区二区三区| 无码AV动漫精品专区| 精品国产乱码久久久久APP下载| 亚洲Ⅴ国产V天堂A无码二区| 国产经典一区二区三区蜜芽| 天堂在/线资源中文在线BT| 激情无码人妻又粗又大中国人| 最新精品国偷自产在线下载 | 俄罗斯ZOOM与人性ZOOM| 亚洲AV无码专区成人网址| 免费无人区一码二码乱码| 高潮时粗俗不堪入耳的话| 亚洲男女一区二区三区| 欧美成人免费影片区二区| 国产激情一区二区三区成人| 野花韩国高清免费视频6| 人妻少妇看A偷人无码| 国内精品伊人久久久久妇| 亚洲AV无码精品色午夜蛋壳| 末成年女AV片一区二区| 国产精品9999久久久久| 无码一区二区三区AⅤ免费蜜桃视 无码一区二区三区AⅤ免费麻豆 |