国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Linux > 正文

linux句柄的概念是什么

2024-08-27 23:54:54
字體:
供稿:網(wǎng)友
  本篇內(nèi)容主要講解“linux句柄的概念是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“linux句柄的概念是什么”吧!
 
 
  在linux中,句柄是一個(gè)標(biāo)識符,是由系統(tǒng)所管理的引用標(biāo)識,內(nèi)核可以通過句柄來計(jì)算出內(nèi)核里文件對象的地址;開發(fā)者只要獲得對象的句柄,就可以對對象進(jìn)行任意的操作。
 
  本教程操作環(huán)境:linux5.9.8系統(tǒng)、Dell G3電腦。
 
  什么是句柄
 
  句柄就是一個(gè)標(biāo)識符,只要獲得對象的句柄,我們就可以對對象進(jìn)行任意的操作。
 
  句柄不是指針,操作系統(tǒng)用句柄可以找到一塊內(nèi)存,這個(gè)句柄可能是標(biāo)識符,map的key,也可能是指針,看操作系統(tǒng)怎么處理的了。fd算是在某種程度上替代句柄吧;Linux 有相應(yīng)機(jī)制,但沒有統(tǒng)一的句柄類型,各種類型的系統(tǒng)資源由各自的類型來標(biāo)識,由各自的接口操作。
 
  在操作系統(tǒng)層面上,文件操作也有類似于FILE的一個(gè)概念,在Linux里,這叫做文件描述符(File Descriptor),而在Windows里,叫做句柄(Handle)(以下在沒有歧義的時(shí)候統(tǒng)稱為句柄)。用戶通過某個(gè)函數(shù)打開文件以獲得句柄,此后用戶操縱文件皆通過該句柄進(jìn)行。
 
  粗暴的解釋
 
  windowns中是handle,liunx類似的是fd,最早的windows開發(fā)書籍,handle是被翻譯成“把手”的。雖然不好聽,但是個(gè)人認(rèn)為相當(dāng)傳神。
 
  雖然你握住的只是把手,卻能拉動整扇門,而且你根本不用在意那門長什么樣子
 
  一扇門如果有多個(gè)把手,被不同的人(進(jìn)程)握住,門往哪兒走就不好說了
 
  設(shè)計(jì)這么一個(gè)句柄的原因在于句柄可以防止用戶隨意讀寫操作系統(tǒng)內(nèi)核的文件對象。無論是Linux還是Windows,文件句柄總是和內(nèi)核的文件對象相關(guān)聯(lián)的,但如何關(guān)聯(lián)細(xì)節(jié)用戶并不可見。內(nèi)核可以通過句柄來計(jì)算出內(nèi)核里文件對象的地址,但此能力并不對用戶開放。
 
  在liunx中的句柄
 
  在linux系統(tǒng)設(shè)計(jì)里面遵循一切都是文件的原則,即磁盤文件、目錄、網(wǎng)絡(luò)套接字、磁盤、管道等,所有這些都是文件,在我們進(jìn)行打開的時(shí)候會返回一個(gè)fd,即是文件句柄。
 
  如果頻繁的打開文件,或者打開網(wǎng)絡(luò)套接字而忘記釋放就會有句柄泄露的現(xiàn)象。
 
  在linux系統(tǒng)中對進(jìn)程可以調(diào)用的文件句柄數(shù)進(jìn)行了限制,在默認(rèn)情況下每個(gè)進(jìn)程可以調(diào)用的最大句柄數(shù)是1024個(gè),如果超過了這個(gè)限制,進(jìn)程將無法獲取新的句柄,而從導(dǎo)致不能打開新的文件或者網(wǎng)絡(luò)套接字,對于線上服務(wù)器即會出現(xiàn)服務(wù)被拒絕的情況。
 
  下面舉一個(gè)實(shí)際的例子,在Linux中,值為0、1、2的fd分別代表標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤輸出。在程序中打開文件得到的fd從3開始增長。
 
  fd具體是什么呢?
 
  在內(nèi)核中,每一個(gè)進(jìn)程都有一個(gè)私有的“打開文件表”,這個(gè)表是一個(gè)指針數(shù)組,每一個(gè)元素都指向一個(gè)內(nèi)核的打開文件對象。
 
  而fd,就是這個(gè)表的下標(biāo)。當(dāng)用戶打開一個(gè)文件時(shí),內(nèi)核會在內(nèi)部生成一個(gè)打開文件對象,并在這個(gè)表里找到一個(gè)空項(xiàng),讓這一項(xiàng)指向生成的打開文件對象,并返回這一項(xiàng)的下標(biāo)作為fd。
 
  由于這個(gè)表處于內(nèi)核,并且用戶無法訪問到,因此用戶即使擁有fd,也無法得到打開文件對象的地址,只能夠通過系統(tǒng)提供的函數(shù)來操作。
 
  在C語言里,操縱文件的渠道則是FILE結(jié)構(gòu),不難想象,C語言中的FILE結(jié)構(gòu)必定和fd有一對一的關(guān)系,每個(gè)FILE結(jié)構(gòu)都會記錄自己唯一對應(yīng)的fd。
 
  在程序設(shè)計(jì)中,句柄是一種特殊的智能指針。當(dāng)一個(gè)應(yīng)用程序要引用其他系統(tǒng)(如數(shù)據(jù)庫、操作系統(tǒng) )所管理的內(nèi)存 塊或?qū)ο?時(shí),就要使用句柄。
 
  句柄與普通指針的區(qū)別在于,指針包含的是引用對象的內(nèi)存地址,而句柄則是由系統(tǒng)所管理的引用標(biāo)識,該標(biāo)識可以被系統(tǒng)重新定位到一個(gè)內(nèi)存地址上。這種間接訪問對象的模式增強(qiáng)了系統(tǒng)對引用對象 的控制。
 
  在上世紀(jì)80年代的操作系統(tǒng)(如Mac OS 和Windows )的內(nèi)存管理 中,句柄被廣泛應(yīng)用。Unix 系統(tǒng)的文件描述符 基本上也屬于句柄。和其它桌面環(huán)境 一樣,Windows API 大量使用句柄來標(biāo)識系統(tǒng)中的對象 ,并建立操作系統(tǒng)與用戶空間 之間的通信渠道。例如,桌面上的一個(gè)窗體由一個(gè)HWND 類型的句柄來標(biāo)識。
 
  如今,內(nèi)存容量的增大和虛擬內(nèi)存算法使得更簡單的指針愈加受到青睞,而指向另一指針的那類句柄受到冷淡。盡管如此,許多操作系統(tǒng)仍然把指向私有對象的指針以及進(jìn)程傳遞給客戶端的內(nèi)部數(shù)組下標(biāo)稱為句柄。
 
  到此,相信大家對“linux句柄的概念是什么”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

(編輯:武林網(wǎng))

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 曲靖市| 松原市| 荔波县| 广西| 芦山县| 鄯善县| 侯马市| 喀喇沁旗| 洪湖市| 千阳县| 肇源县| 颍上县| 锡林郭勒盟| 中山市| 徐水县| 张掖市| 岱山县| 碌曲县| 伊吾县| 凤山县| 湘乡市| 西平县| 崇左市| 南郑县| 巴东县| 江油市| 南木林县| 砀山县| 赣榆县| 万宁市| 定结县| 巴彦淖尔市| 嵊泗县| 广安市| 田林县| 南京市| 文昌市| 镇沅| 安溪县| 安陆市| 兴文县|