檔案描述符以及動態檔案

2021-10-09 12:14:47 字數 1263 閱讀 1590

檔案描述符:

1.對於核心而言,所有的開啟檔案都由檔案描述符引用,檔案描述符是乙個非負整數,當開啟乙個現存盤案或者建立乙個新檔案時,核心向程序返回乙個檔案描述符。當讀寫乙個檔案時,用open和creat返回為的檔案描述符標識該檔案,將其作為引數傳遞給read和write.

按照慣例,unix shell使用檔案描述符0與程序的標準輸入相結合,檔案描述符1與標準輸出相結合,檔案描述符2與標準錯誤輸出相結合,stdin_fileno、stdout_fileno、stderr_fileno這幾個巨集代替了0、1、2這三個數。

2.檔案描述符,這幾個數字在乙個程序中表示乙個特定含義,當我們open乙個檔案時,作業系統在記憶體中構建了一些資料結構來表示這個動態檔案,然後返回給應用程式乙個數字作為檔案描述符,這個數字就和我們記憶體中維護的這個動態檔案的這些資料結構繫結上了。以後我們應用程式如果要操作這個動態問價,只需要用這個檔案描述符區分即可。

3.檔案描述符的作用域就是當前程序。出了這個程序檔案描述符就沒有意義了

open函式開啟檔案,開啟成功返回乙個檔案描述符,開啟失敗,返回-1

#include

#include

#include

#include

#include

#include

#include

intmain()

~~

1、在linux中要操作乙個檔案,一般是先open開啟乙個檔案,得到檔案描述符,然後對檔案進行讀寫操作(或其他操作),最後是close關閉檔案即可。

2、強調一點,我們對檔案進行操作時,一定要開啟成功之後才能操作,如果開啟失敗,就不用進行後邊的操作了,最後讀寫完成後,一定要關閉檔案,否則會造成檔案損壞

3、檔案平時是存放在塊裝置中的檔案系統中的,我們把這種檔案叫靜態檔案,當我們去open開啟乙個檔案時。linux核心做的操作包括:核心在程序中建立乙個開啟檔案的資料結構,記錄下我們開啟的這個檔案;核心在記憶體中申請一段記憶體,並且將靜態檔案的記憶體從塊裝置中讀取到核心中特定位址管理存放(叫動態檔案)

4、開啟檔案以後,以後對這個檔案的讀寫操作,都是針對記憶體中的這乙份動態檔案的,而並不是針對靜態檔案的。,當我們對動態檔案進行讀寫以後,此時記憶體中動態檔案和塊裝置中的靜態檔案就不同步了,當我們close關閉動態檔案時,close內部核心將記憶體中的動態檔案的內容去更新(同步)塊裝置中的靜態檔案。

5、為什麼這麼設計,不直接對塊裝置直接操作。

塊裝置本身讀寫非常不靈活,是按塊讀寫的,而記憶體是按照位元組單位操作的,而且可以隨機操作,很靈活

mysql 檔案描述符 檔案描述符

toc 首先,linux的世界裡一切皆為檔案,無論是裝置還是乙個socket連線。檔案又可分為 普通檔案 目錄檔案 鏈結檔案和裝置檔案。檔案描述符 file descriptor 是核心為了高效管理已被開啟的檔案所建立的索引,其是乙個非負整數 通常是小整數 用於指代被開啟的檔案,所有執行i o操作的...

檔案描述符

檔案描述符 是個很小的正整數,它是乙個索引值,指向核心為每乙個程序所維護的該程序開啟檔案的記錄表。檔案描述符的優點 相容posix標準,許多 linux 和unix 系統呼叫都依賴於它。檔案描述符的缺點 不能移植到unix以外的系統上去,也不直觀。基於檔案描述符的輸入輸出函式 open 開啟乙個檔案...

檔案描述符

作業系統程序表中存放各個檔案進行檔案描述 核心 kernel 利用檔案描述符 file descriptor 來訪問檔案。檔案描述符是非負整數。開啟現存盤案或新建檔案時,核心會返回乙個檔案描述符。讀寫檔案也需要使用檔案描述符來指定待讀寫的檔案。目錄檔案描述符概述 如何建立檔案描述符 使用的好處 缺點...