Linux 控制代碼是什麼

2021-09-19 13:18:02 字數 3143 閱讀 4104

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 型別的控制代碼來標識。

如今,記憶體 容量的增大和虛擬記憶體 演算法使得更簡單的指標 愈加受到青睞,而指向另一指標的那類控制代碼受到冷淡。儘管如此,許多作業系統 仍然把指向私有物件 的指標以及程序傳遞給客戶端 的內部陣列 下標稱為控制代碼。

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 型別的控制代碼來標識。

如今,記憶體 容量的增大和虛擬記憶體 演算法使得更簡單的指標 愈加受到青睞,而指向另一指標的那類控制代碼受到冷淡。儘管如此,許多作業系統 仍然把指向私有物件 的指標以及程序傳遞給客戶端 的內部陣列 下標稱為控制代碼。

控制代碼是什麼?

控制代碼是乙個指向指標的指標,我們知道,指標中儲存的是記憶體位址。那麼乙個指向指標的指標,它儲存的就是另乙個指標的位址,我們可以通過乙個指標來找到另乙個指標,再通過另乙個指標訪問到具體的資料,那麼為什麼要這麼麻煩呢?我們知道,當執行乙個占用大量記憶體的程式時,系統記憶體很快就會被填滿,這時 wind...

控制代碼是什麼

一 控制代碼定義 控制代碼就是個數字,一般和當前系統下的整數的位數一樣,比如32bit系統下就是4個位元組。這個數字是乙個物件的唯一標示,和物件一一對應。這個物件可以是乙個塊記憶體,乙個資源,或者乙個服務的context 如 socket,thread 等等。這個數字的 可以有很多中,只要能保證和它...

控制代碼是什麼

控制代碼 handle 是乙個是用來標識物件或者專案的識別符號,可以用來描述窗體 檔案等,值得注意的是控制代碼不能是常量 handle 控制代碼,是windows用來表示物件的 不是c 的物件 hwnd是其中一種,hwnd是handle,但handle不只是hwnd,handle是乙個通用控制代碼表...