在linux中,句柄是一個標識符,是由系統(tǒng)所管理的引用標識,核心可以透過句柄來計算出核心裡文件物件的位址;開發(fā)者只要取得物件的句柄,就可以對物件進行任意的操作。
本教學操作環(huán)境:linux5.9.8系統(tǒng)、Dell G3電腦。
什麼是句柄
句柄就是一個標識符,只要得到物件的句柄,我們就可以對物件進行任意的操作。
句柄不是指針,作業(yè)系統(tǒng)用句柄可以找到一塊內存,這個句柄可能是標識符,map的key,也可能是指針,看操作系統(tǒng)怎麼處理的了。 fd算是在某種程度上替代句柄吧;Linux 有對應機制,但沒有統(tǒng)一的句柄類型,各種類型的系統(tǒng)資源由各自的類型來標識,由各自的介面操作。
在作業(yè)系統(tǒng)層面上,檔案操作也有類似FILE的一個概念,在Linux裡,這叫做檔案描述子(File Descriptor),而在Windows裡,叫做句柄(Handle)(以下在沒有歧義的時候統(tǒng)稱為句柄)。使用者透過某個函數(shù)開啟檔案以取得句柄,此後使用者操縱檔案皆透過該句柄進行。
粗暴的解釋
windowns中是handle,liunx類似的是fd,最早的windows開發(fā)書籍,handle是被翻譯成「把手”的。雖然不好聽,但是個人認為相當傳神。
雖然你握住的只是把手,卻能拉動整扇門,而且你根本不用在意那門長什麼樣子
一扇門如果有多個把手,被不同的人(進程)握住,門往哪裡走就不好說了
設計這麼一個句柄的原因在於句柄可以防止用戶隨意讀寫操作系統(tǒng)內核的文件對象。無論是Linux還是Windows,檔案句柄總是和核心的檔案物件相關聯(lián)的,但如何關聯(lián)細節(jié)使用者並不可見。核心可以透過句柄來計算出核心裡文件物件的位址,但此能力並不對使用者開放。
在liunx中的句柄
#在linux系統(tǒng)設計裡面遵循一切都是檔案的原則,即磁碟檔案、目錄、網路套接字、磁碟、管道等,所有這些都是文件,在我們進行開啟的時候會回傳一個fd,也就是文件句柄。
如果頻繁的開啟文件,或開啟網路套接字而忘記釋放就會有句柄洩漏的現(xiàn)象。
在linux系統(tǒng)中對進程可以呼叫的檔案句柄數(shù)進行了限制,在預設情況下每個進程可以呼叫的最大句柄數(shù)是1024個,如果超過了這個限制,進程將無法取得新的句柄,而從導致不能開啟新的檔案或網路套接字,對於線上伺服器即會出現(xiàn)服務被拒絕的情況。
下面舉一個實際的例子,在Linux中,值為0、1、2的fd分別代表標準輸入、標準輸出、標準錯誤輸出。在程式中開啟檔案得到的fd從3開始成長。
fd具體是什麼呢?
在內核中,每一個進程都有一個私有的“打開文件表”,這個表是一個指針數(shù)組,每一個元素都指向一個內核的開啟文件對象。
而fd,就是這個表的下標。當使用者開啟一個檔案時,核心會在內部產生一個開啟檔案對象,並在這個表格裡找到一個空項,讓這一項指向產生的開啟檔案對象,並傳回這項的下標作為fd。
由於這個表處於內核,且使用者無法存取到,因此使用者即使擁有fd,也無法得到開啟檔案物件的位址,只能夠透過系統(tǒng)提供的函數(shù)來操作。
在C語言裡,操縱檔案的管道則是FILE結構,不難想像,C語言中的FILE結構必定和fd有一對一的關係,每個FILE結構都會記錄自己唯一對應的fd 。
在程式設計中,句柄是一種特殊的智慧指標。當一個應用程式要引用其他系統(tǒng)(如資料庫、作業(yè)系統(tǒng) )所管理的記憶體 區(qū)塊或物件 時,就要使用句柄。
句柄與普通指標的差異在於,指標包含的是引用物件的記憶體位址,而句柄則是由系統(tǒng)所管理的參考標識,該標識可以被系統(tǒng)重新定位到一個記憶體位址上。這種間接存取物件的模式增強了系統(tǒng)對引用物件 的控制。
在上世紀80年代的作業(yè)系統(tǒng)(如Mac OS 和Windows )的記憶體管理 中,句柄被廣泛地應用。 Unix 系統(tǒng)的檔案描述子 基本上也屬於句柄。和其它桌面環(huán)境 一樣,Windows API 大量使用句柄來識別系統(tǒng)中的物件 ,並建立作業(yè)系統(tǒng)與使用者空間 之間的通訊管道。例如,桌面上的一個視窗由一個HWND 類型的句柄來識別。
如今,記憶體容量的增大和虛擬記憶體演算法使得更簡單的指標愈加受到青睞,而指向另一指標的那類句柄受到冷淡。儘管如此,許多作業(yè)系統(tǒng)仍然把指向私有物件的指標以及進程傳遞給客戶端的內部陣列下標稱為句柄。
相關推薦:《Linux影片教學》
以上是linux句柄是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undress AI Tool
免費脫衣圖片

Undresser.AI Undress
人工智慧驅動的應用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6
視覺化網頁開發(fā)工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

在CentOS上集成Postman應用可以通過多種方法來實現(xiàn),以下是詳細的步驟和建議:通過下載安裝包安裝Postman下載Postman的Linux版本安裝包:訪問Postman官方網站,選擇適用於Linux的版本進行下載。解壓安裝包:使用以下命令將安裝包解壓到指定目錄,例如/opt:sudotar-xzfpostman-linux-x64-xx.xx.xx.tar.gz-C/opt請注意將“postman-linux-x64-xx.xx.xx.tar.gz”替換為您實際下載的文件名。創(chuàng)建符號

在VSCode中手動安裝插件包的步驟是:1.下載插件的.vsix文件;2.打開VSCode並按Ctrl Shift P(Windows/Linux)或Cmd Shift P(Mac)調出命令面板;3.輸入並選擇Extensions:InstallfromVSIX...,然後選擇.vsix文件並安裝。手動安裝插件提供了一種靈活的安裝方式,特別是在網絡受限或插件市場不可用時,但需要注意文件安全和可能的依賴問題。

【常見目錄說明】目錄/bin存放二進制可執(zhí)行文件(ls,cat,mkdir等),常用命令一般都在這裡。 /etc存放系統(tǒng)管理和配置文件/home存放所有用戶文件的根目錄,是用戶主目錄的基點,比如用戶user的主目錄就是/home/user,可以用~user表示/usr用於存放系統(tǒng)應用程序,比較重要的目錄/usr/local?本地系統(tǒng)管理員軟件安裝目錄(安裝系統(tǒng)級的應用)。這是最龐大的目錄,要用到的應用程序和文件幾乎都在這個目錄。 /usr/x11r6?存放x?window的目錄/usr/bin?眾多

在PyCharm中設置解釋器的位置可以通過以下步驟實現(xiàn):1.打開PyCharm,點擊“File”菜單,選擇“Settings”或“Preferences”。 2.找到並點擊“Project:[你的項目名]”,然後選擇“PythonInterpreter”。 3.點擊“AddInterpreter”,選擇“SystemInterpreter”,瀏覽到Python安裝目錄,選中Python可執(zhí)行文件,點擊“OK”。設置解釋器時需注意路徑正確性、版本兼容性和虛擬環(huán)境的使用,以確保項目順利運行。

Java與其他編程語言的主要區(qū)別在於其“一次編寫,到處運行”的跨平臺特性。 1.Java的語法接近C ,但去掉了容易出錯的指針操作,適合大型企業(yè)應用。 2.與Python相比,Java在性能和大規(guī)模數(shù)據處理上更具優(yōu)勢。 Java的跨平臺優(yōu)勢源於Java虛擬機(JVM),它能在不同平臺上運行相同的字節(jié)碼,簡化開發(fā)和部署,但需注意避免使用平臺特定API以保持跨平臺性。

了解Nginx的配置文件路徑和初始設置非常重要,因為它是優(yōu)化和管理Web服務器的第一步。 1)配置文件路徑通常是/etc/nginx/nginx.conf,使用nginx-t命令可以查找並測試語法。 2)初始設置包括全局設置(如user、worker_processes)和HTTP設置(如include、log_format),這些設置允許根據需求進行定制和擴展,錯誤配置可能導致性能問題和安全漏洞。

MySQL的安裝和配置可以通過以下步驟完成:1.從官方網站下載適合操作系統(tǒng)的安裝包。 2.運行安裝程序,選擇“開發(fā)者默認”選項並設置root用戶密碼。 3.安裝後配置環(huán)境變量,確保MySQL的bin目錄在PATH中。 4.創(chuàng)建用戶時遵循最小權限原則並設置強密碼。 5.優(yōu)化性能時調整innodb_buffer_pool_size和max_connections參數(shù)。 6.定期備份數(shù)據庫並優(yōu)化查詢語句以提高性能。

Informix和MySQL均為廣受青睞的關係型數(shù)據庫管理系統(tǒng),它們在Linux環(huán)境下均表現(xiàn)優(yōu)異並得到廣泛應用。以下是對兩者在Linux平臺上的對比分析:安裝與配置Informix:在Linux上部署Informix需要下載對應的安裝文件,隨後依據官方文檔指引完成安裝及配置流程。 MySQL:MySQL的安裝過程較為簡便,可通過系統(tǒng)的包管理工具(例如apt或yum)輕鬆實現(xiàn)安裝,並且網絡上有大量的教程和社區(qū)支持可供參考。性能表現(xiàn)Informix:Informix以卓越的性能和
