首頁 運維 linux運維 linux句柄是什麼

linux句柄是什麼

Feb 25, 2022 pm 01:39 PM
linux 句柄

在linux中,句柄是一個標識符,是由系統所管理的引用標識,核心可以透過句柄來計算出核心裡文件物件的位址;開發者只要取得物件的句柄,就可以對物件進行任意的操作。

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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

vscode需要什麼電腦配置 vscode需要什麼電腦配置 Apr 15, 2025 pm 09:48 PM

VS Code 系統要求:操作系統:Windows 10 及以上、macOS 10.12 及以上、Linux 發行版處理器:最低 1.6 GHz,推薦 2.0 GHz 及以上內存:最低 512 MB,推薦 4 GB 及以上存儲空間:最低 250 MB,推薦 1 GB 及以上其他要求:穩定網絡連接,Xorg/Wayland(Linux)

Linux體系結構:揭示5個基本組件 Linux體系結構:揭示5個基本組件 Apr 20, 2025 am 12:04 AM

Linux系統的五個基本組件是:1.內核,2.系統庫,3.系統實用程序,4.圖形用戶界面,5.應用程序。內核管理硬件資源,系統庫提供預編譯函數,系統實用程序用於系統管理,GUI提供可視化交互,應用程序利用這些組件實現功能。

vscode終端使用教程 vscode終端使用教程 Apr 15, 2025 pm 10:09 PM

vscode 內置終端是一個開發工具,允許在編輯器內運行命令和腳本,以簡化開發流程。如何使用 vscode 終端:通過快捷鍵 (Ctrl/Cmd ) 打開終端。輸入命令或運行腳本。使用熱鍵 (如 Ctrl L 清除終端)。更改工作目錄 (如 cd 命令)。高級功能包括調試模式、代碼片段自動補全和交互式命令歷史。

git怎麼查看倉庫地址 git怎麼查看倉庫地址 Apr 17, 2025 pm 01:54 PM

要查看 Git 倉庫地址,請執行以下步驟:1. 打開命令行並導航到倉庫目錄;2. 運行 "git remote -v" 命令;3. 查看輸出中的倉庫名稱及其相應的地址。

notepad怎麼運行java代碼 notepad怎麼運行java代碼 Apr 16, 2025 pm 07:39 PM

雖然 Notepad 無法直接運行 Java 代碼,但可以通過借助其他工具實現:使用命令行編譯器 (javac) 編譯代碼,生成字節碼文件 (filename.class)。使用 Java 解釋器 (java) 解釋字節碼,執行代碼並輸出結果。

vscode在哪寫代碼 vscode在哪寫代碼 Apr 15, 2025 pm 09:54 PM

在 Visual Studio Code(VSCode)中編寫代碼簡單易行,只需安裝 VSCode、創建項目、選擇語言、創建文件、編寫代碼、保存並運行即可。 VSCode 的優點包括跨平台、免費開源、強大功能、擴展豐富,以及輕量快速。

Linux的主要目的是什麼? Linux的主要目的是什麼? Apr 16, 2025 am 12:19 AM

Linux的主要用途包括:1.服務器操作系統,2.嵌入式系統,3.桌面操作系統,4.開發和測試環境。 Linux在這些領域表現出色,提供了穩定性、安全性和高效的開發工具。

vscode終端命令不能用 vscode終端命令不能用 Apr 15, 2025 pm 10:03 PM

VS Code 終端命令無法使用的原因及解決辦法:未安裝必要的工具(Windows:WSL;macOS:Xcode 命令行工具)路徑配置錯誤(添加可執行文件到 PATH 環境變量中)權限問題(以管理員身份運行 VS Code)防火牆或代理限制(檢查設置,解除限制)終端設置不正確(啟用使用外部終端)VS Code 安裝損壞(重新安裝或更新)終端配置不兼容(嘗試不同的終端類型或命令)特定環境變量缺失(設置必要的環境變量)

See all articles