控制代碼和檔案描述符

2021-09-22 19:35:29 字數 1281 閱讀 5214

控制代碼是windows下的概念。控制代碼是windows下各種物件的識別符號,比如檔案(也許叫文件比較合適一點)、資源、選單、游標、點陣圖等。檔案控制代碼和檔案描述符類似,它也是乙個非負整數,也用於定位檔案資料在記憶體中的位置。

由於linux下所有東西都被看成是檔案,比如檔案(也許叫文件比較合適一點)、目錄、程序、網路socket、各種硬體裝置等,所以linux下的檔案描述符其實就相當於windows下的控制代碼。檔案控制代碼只是windows眾多控制代碼中的一種型別而已。

可以這麼說:控制代碼是指向指標的指標。控制代碼指向的空間穩定,這個穩定的空間存放著不穩定的位址,windows記憶體管理器經常在記憶體中來回移動物件,這些物件的位址經常變化,但把這些變化的位址存放到不變的控制代碼位址空間裡,就可以通過控制代碼確定這些物件了。

詳細的看下面的兩個回答:

對於linux而言,所有對裝置和檔案的操作都使用檔案描述符來進行的。檔案描述符是乙個非負的整數,它是乙個索引值,指向核心中每個程序開啟檔案的記錄表。當開啟乙個現存盤案或建立乙個新檔案時,核心就向程序返回乙個檔案描述符;當需要讀寫檔案時,也需要把檔案描述符作為引數傳遞給相應的函式。

通常,乙個程序啟動時,都會開啟3個檔案:標準輸入、標準輸出和標準出錯處理。這3個檔案分別對應檔案描述符為0、1和2(巨集std_fileno、stdout_fileno和stderr_fileno)。

每乙個檔案描述符會與乙個開啟檔案相對應,同時,不同的檔案描述符也會指向同乙個檔案相同的檔案可以被不同的程序開啟也可以在同乙個程序中被多次開啟。系統為每乙個程序維護了乙個檔案描述符表,該錶的值都是從0開始的,所以在不同的程序中你會看到相同的檔案描述符,這種情況下相同檔案描述符有可能指向同乙個檔案,也有可能指向不同的檔案。具體情況要具體分析,要理解具體其概況如何,需要檢視由核心維護的3個資料結構。

 程序級的檔案描述符表

 系統級的開啟檔案描述符表

 檔案系統的i-node表

檔案控制代碼也稱為檔案指標(file *):c語言中使用檔案指標做為i/o的控制代碼。檔案指標指向程序使用者區中的乙個被稱為file結構的資料結構。file結構包括乙個緩衝區和乙個檔案描述符。從某種意義上說檔案指標就是控制代碼的控制代碼(在windows系統上,檔案描述符被稱作檔案控制代碼)。

檔案描述符本質是乙個索引號(非負整數),系統使用者層可以根據它找到系統核心層的檔案資料,即檔案描述符是檔案描述符表的乙個索引,。這是乙個posix標準下的概念,常見於類unix系統,比如linux。windows也是聲稱遵循posix標準的,所以windows也有檔案描述符這個概念,但不常用。

什麼是控制代碼和檔案描述符

控制代碼就是乙個識別符號,只要獲得物件的控制代碼,我們就可以對物件進行任意的操作。控制代碼不是指標,作業系統用控制代碼可以找到一塊記憶體,這個控制代碼可能是識別符號,map的key,也可能是指標,看作業系統怎麼處理的了。fd算是在某種程度上替代控制代碼吧 linux 有相應機制,但沒有統一的控制代碼...

檔案控制代碼 檔案描述符

檔案控制代碼和檔案描述符 在我們跨平台開發的時候,經常會碰到這倆個概念 檔案描述符 本質上是乙個索引號 非負整數 系統使用者層可以根據它找到系統核心層的檔案資料。這是乙個posix標準下的概念,常見於linux系統。但windows也有檔案描述符這個概念,但不常用。檔案控制代碼 windows下的概...

檔案控制代碼 檔案描述符

由於程序級檔案描述符表的存在,不同的程序中會出現相同的檔案描述符,它們可能指向同乙個檔案,也可能指向不同的檔案。兩個不同的檔案描述符,若指向同乙個開啟檔案控制代碼 file 將共享同一檔案偏移量。因此,如果通過其中乙個檔案描述符來修改檔案偏移量,那麼從另乙個檔案描述符中也會觀察到變化,無論這兩個檔案...