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

在Debian系統上使用OpenSSL進行數字簽名驗證,可以按照以下步驟操作:準備工作安裝OpenSSL:確保你的Debian系統已經安裝了OpenSSL。如果沒有安裝,可以使用以下命令進行安裝:sudoaptupdatesudoaptinstallopenssl獲取公鑰:數字簽名驗證需要使用簽名者的公鑰。通常,公鑰會以文件的形式提供,例如public_key.pe

要檢查Debian系統上OpenSSL版本的安全性,您可以按照以下步驟操作:打開終端:在Debian系統上打開終端。更新包列表:確保您的包列表是最新的,運行以下命令:sudoaptupdate檢查OpenSSL版本:使用以下命令來檢查當前安裝的OpenSSL版本:opensslversion檢查已知漏洞:您可以使用openssls_client命令來測試與

在Debian系統上配置HTTPS服務器涉及幾個步驟,包括安裝必要的軟件、生成SSL證書、配置Web服務器(如Apache或Nginx)以使用SSL證書。以下是一個基本的指南,假設你使用的是ApacheWeb服務器。 1.安裝必要的軟件首先,確保你的系統是最新的,並安裝Apache和OpenSSL:sudoaptupdatesudoaptupgradesudoaptinsta

更新OpenSSL是確保系統安全性的重要步驟,但在進行更新時,需要注意以下幾點以確保更新過程順利且系統不受影響:更新前的準備備份重要數據:在進行任何系統更新之前,務必備份重要數據,以防更新過程中出現問題導致數據丟失。檢查當前OpenSSL版本:了解當前OpenSSL的版本和已知的安全漏洞,以便選擇合適的更新版本。依賴關係檢查:確保系統上安裝了所有必要的依賴包,以避免更新失敗。更新步驟

Debian本身是一個Linux發行版,而Hadoop是一個分佈式系統基礎架構,通常不與特定的Linux發行版綁定在一起使用。因此,提到“DebianHadoop容錯機制”可能是不准確的,因為Hadoop的容錯機制是Hadoop自身設計的一部分,與Debian發行版無直接關聯。不過,我可以解釋Hadoop的容錯機制是如何工作的。 Hadoop的容錯機制是其高可用性和穩定性的關鍵,主要包括以下幾個方

在Debian系統下配置GitLab涉及多個步驟,包括安裝必要的依賴項、下載和安裝GitLab軟件包、配置GitLab以及啟動服務。以下是一個詳細的配置指南:一、準備工作更新系統包:sudoapt-getupdatesudoapt-getupgrade安裝依賴項:sudoapt-getinstall-ycurlopenssh-serverca-certifi

在Debian上提高Hadoop數據本地化可以通過以下幾種方法實現:均衡硬件資源:確保HDFS集群中各個DataNode節點的硬件資源(如CPU、內存、磁盤容量等)相近,避免出現明顯的性能瓶頸。優化數據寫入策略:合理配置HDFS的數據寫入策略,如根據節點的負載情況和可用資源動態選擇DataNode節點進行存儲,以實現數據的均衡分佈。使用Balancer工具:利用HD

在Debian系統中,GitLab的資源佔用情況是一個重要的考量因素,特別是在進行高負載操作如CI/CD時。以下是對GitLab資源佔用情況的詳細分析和建議:資源佔用概況CPU使用率:GitLab運行後,CPU的平均使用率可能保持在30%左右,但在高負載情況下,如頻繁的CI/CD操作,CPU使用率可能會飆升。內存使用率:內存使用率通常保持在75%左右,一旦有人開始訪問GitLab頁面進行操作


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

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

Dreamweaver Mac版
視覺化網頁開發工具