1.控制代碼就是乙個識別符號,只要獲得物件的控制代碼,我們就可以對物件進行任意的操作。
.2.控制代碼不是指標,作業系統用控制代碼可以找到一塊記憶體,這個控制代碼可能是識別符號,map的key,也可能是指標,看作業系統怎麼處理的了。
fd算是在某種程度上替代控制代碼吧;
linux 有相應機制,但沒有統一的控制代碼型別,各種型別的系統資源由各自的型別來標識,由各自的介面操作。
.3.在作業系統層面上,檔案操作也有類似於file的乙個概念,在linux裡,這叫做檔案描述符(file descriptor),而在windows裡,叫做控制代碼(handle)(以下在沒有歧義的時候統稱為控制代碼)。使用者通過某個函式開啟檔案以獲得控制代碼,此 後使用者操縱檔案皆通過該控制代碼進行。
.設計這麼乙個控制代碼的原因在於控制代碼可以防止使用者隨意讀寫操作系統核心的檔案物件。無論是linux還是windows,檔案控制代碼總是和核心的檔案物件相關聯的,但如何關聯細節使用者並不可見。核心可以通過控制代碼來計算出核心裡檔案物件的位址,但此能力並不對使用者開放。
.下面舉乙個實際的例子,在linux中,值為0、1、2的fd分別代表標準輸入、標準輸出和標準錯誤輸出。在程式中開啟檔案得到的fd從3開始增長。 fd具體是什麼呢?在核心中,每乙個程序都有乙個私有的「開啟檔案表」,這個表是乙個指標陣列,每乙個元素都指向乙個核心的開啟檔案物件。而fd,就是這 個表的下標。當使用者開啟乙個檔案時,核心會在內部生成乙個開啟檔案物件,並在這個表裡找到乙個空項,讓這一項指向生成的開啟檔案物件,並返回這一項的下標 作為fd。由於這個表處於核心,並且使用者無法訪問到,因此使用者即使擁有fd,也無法得到開啟檔案物件的位址,只能夠通過系統提供的函式來操作。..
.跳轉到:
導航 ,
搜尋在程式設計 中,控制代碼是一種特殊的智慧型指標 。當乙個應用程式 要引用其他系統(如資料庫、作業系統 )所管理的記憶體 塊或物件 時,就要使用控制代碼。
控制代碼與普通指標 的區別在於,指標包含的是引用物件 的記憶體位址 ,而控制代碼則是由系統所管理的引用標識,該標識可以被系統重新定位到乙個記憶體位址 上。這種間接訪問物件 的模式增強了系統對引用物件 的控制。(參見封裝 )。
在上世紀80年代的作業系統(如mac os 和windows )的記憶體管理 中,控制代碼被廣泛應用。unix 系統的檔案描述符 基本上也屬於控制代碼。和其它桌面環境 一樣,windows api 大量使用控制代碼來標識系統中的物件 ,並建立作業系統與使用者空間 之間的通訊渠道。例如,桌面上的乙個窗體由乙個hwnd
型別的控制代碼來標識。
如今,記憶體 容量的增大和虛擬記憶體 演算法使得更簡單的指標 愈加受到青睞,而指向另一指標的那類控制代碼受到冷淡。儘管如此,許多作業系統 仍然把指向私有物件 的指標以及程序傳遞給客戶端 的內部陣列 下標稱為控制代碼。
fd 控制代碼 Linux下檢視控制代碼
檢視各個分割槽的控制代碼數 df ih 檢視控制代碼最大數 ulimit n 檢視23711程序連線控制代碼數 lsof n awk sort uniq c sort nr more grep 23711 檢視所有程序控制代碼數 lsof n awk sort uniq c sort nr more...
linux控制代碼問題
檢視linux的最大執行緒數目 cat proc sys kernel threads max linux檔案系統限制 linux 系統下ext3檔案系統內給檔案 目錄命名,最長只能支援127個中文字元,英文則可以支援255個字元 1.ulimit a 檢視當前使用者的檔案控制代碼限制 2.使用者級...
Linux中控制代碼
1.控制代碼就是乙個識別符號,只要獲得物件的控制代碼,我們就可以對物件進行任意的操作。2.控制代碼不一定是指標。作業系統用控制代碼可以找到一塊記憶體,這個控制代碼可能是識別符號,例如map的key,也可能是指標,看作業系統怎麼處理的了。fd算是在某種程度上替代控制代碼吧 linux 有相應機制,但沒...