---------檔案的定義:
檔案是作業系統中的乙個重要概念。檔案是以計算機硬碟為載體
計算機以程序為基本單位進行資源的排程和分配;而在使用者進行的輸入、輸出中,則以檔案為基本單位。大多數應用程式的輸入都是通過檔案來實現的,
其輸出也儲存在檔案中,以便資訊的長期儲存及將來的訪問。當使用者將檔案用於應用程式的輸入、輸出時,還希望可以訪問檔案、修改檔案和儲存檔案等,實現
檔案的維護管理,這就需要系統提供乙個檔案管理系統,作業系統的檔案系統就是用於實現使用者的這些管理要求。
從使用者的角度看,檔案系統是作業系統的重要部分之一。使用者關心的是如何命名、分類和查詢檔案,如何保證檔案資料的安全性以及對檔案可以進行哪些操作
等。而對其中的細節,如檔案如何儲存在輔存上、如何管理檔案輔存區域等關心甚少。
檔案系統提供了與二級儲存相關的資源的抽象,讓使用者能在不了解檔案的各種屬性、檔案儲存介質的特徵以及檔案在儲存介質上的具體位置等情況下,方便快捷
地使用檔案。
使用者通過檔案系統建立檔案,提**用程式的輸入、輸出,對資源進行管理。首先了解檔案的結構,我們通過自底向上的方式來定義:
(1)、資料項。資料項是檔案系統中最低階的資料組織形式,可分為以下兩種型別:
基本資料項:用於描述乙個 物件的某種屬性的乙個值,如姓名、日期或證件號等,是資料中可命名的最小邏輯資料單位,即原子資料。
組合資料項:由多個基本資料項組成。
(2)、記錄。記錄是一組相關的資料項的集合,用於描述乙個物件在某方面的屬性,如乙個考生報名記錄包括姓名、出生日期、報考學校代號、身份證等
一系列域。
(3)、檔案。檔案是指由建立者所定義的一組相關資訊的集合,邏輯上可分為有結構檔案和無結構檔案兩種。在有結構檔案中,檔案由一組相似記錄組成,
如報考某學校的所有考生的報考資訊記錄,又稱為記錄式檔案;而無結構檔案則被看成是乙個字元流,比如乙個二進位制檔案或字元檔案,又稱為流式檔案。
雖然上面給出了結構化的表述,但實際上關於檔案並無嚴格的定義。通常在作業系統中將程式和資料組織成檔案。檔案可以是數字、字母或二進位制**,基本
訪問單元可以是位元組、行或記錄。檔案可以長期儲存於硬碟或其他二級儲存器中,允許可控制的程序間共享訪問,能夠被組織成複雜的結構。
-------檔案屬性:
檔案有一定的屬性,這根據系統的不同而有所不同,但是通常都包括如下屬性。
(1)、名稱。檔名稱唯一,以容易讀取的形式儲存。
(2)、識別符號。標識檔案系統內檔案的唯一標籤,通常為數字,它是對人不可讀的一種內部名稱。
(3)、型別。被支援不同型別的檔案系統所使用。
(4)、位置。指向裝置和裝置上檔案的指標。
(5)、大小。檔案當前大小(用位元組、字或塊表示),也可包含檔案允許的最大值。
(6)、保護。對檔案進行保護的訪問控制資訊。
(7)、時間、日期和使用者標識。檔案建立、上次修改和上次訪問的相關資訊,用於保護、安全和跟蹤檔案的使用。
所有檔案的資訊都儲存在目錄結構中,而目錄結構也儲存在外存上。檔案資訊當需要時再調入記憶體。通常,目錄條件包括檔名臣及其唯一識別符號,而
識別符號定位其他屬性的資訊。
--------檔案的基本操作:
檔案屬於抽象資料型別。為了恰當地定義檔案,就需要考慮有關檔案的操作。作業系統提供系統呼叫,它對檔案進行建立、寫、讀、定位和截斷。
(1)、建立檔案。建立檔案有兩個必要步驟,一是在檔案系統中為檔案找到空間;二是在目錄中為新檔案建立條目,該條目記錄檔名稱、在檔案
系統中的位置及其其他可能資訊。
(2)、寫檔案。為了寫檔案,執行乙個系統調動,指明檔名稱和要寫入檔案的內容。對於給定檔名稱,系統搜尋檔案目錄以查詢檔案位置。系統
必須為該檔案維護乙個寫位置的指標。每當發生寫操作,便更新寫指標。
(3)、讀檔案。為了讀檔案,執行乙個系統呼叫,指明檔名稱和要讀入檔案塊的記憶體位置。同樣,需要搜尋目錄以找到相關目錄項,系統維護乙個
讀位置的指標。每當發生讀操作時,更新讀指標。乙個程序通常只乙個檔案讀或寫,所以當前操作位置可作為每個程序當前檔案位置指標。由於
讀和寫操作都使用同一指標,節省了空間也降低了系統複雜度。
(4)、檔案重定位(檔案定址)。按某條件搜尋目錄,將當前檔案位置設為給定值,並且不會讀、寫檔案。
(5)、刪除檔案。先從目錄中找到要刪除檔案的目錄項,使之稱為空項,然後**該檔案所占用的儲存空間。
(6)、截斷檔案。允許檔案所有屬性不變,並刪除檔案內容,即將其長度設為 0 並釋放其空間。
補充:這6個基本操作可以組合到執行其他檔案操作。例如,乙個檔案的複製,可以建立行檔案、從舊檔案讀出並寫入新檔案。
--------檔案的開啟與關閉:
因為許多檔案操作都涉及為給定檔案搜尋相關目錄條目,許多系統要求在首次使用檔案時,使用系統呼叫 open,將指明檔案的屬性(包括該檔案在外存上
的物理位置)從外存拷貝到記憶體開啟檔案目錄表的乙個表目中,並將該錶目的編號(或稱為索引)返回給使用者。作業系統維護乙個包含所有開啟檔案資訊的表
(開啟檔案表,open-file table) 。當使用者需要乙個檔案操作時,可通過該錶的乙個索引指定檔案,就省略了搜尋環節。當檔案不再使用時,程序可以關閉它,
作業系統從開啟檔案表中刪除這一條目。
大部分作業系統要求在檔案使用之前就被顯式開啟。操作 open 會根據檔名搜尋目錄,並將目錄條目複製到開啟檔案表。如果呼叫 open 的請求(建立、
唯讀、讀寫、新增等)得到允許,程序就可以開啟檔案,而 open 通常返回乙個指向開啟檔案表中的乙個條目的指標。通過使用該指標(而非檔名)進行
所有的 i / o 操作,以簡化步驟並節省資源。
注意,open 呼叫完成之後,作業系統對該檔案的任何操作,都不再需要檔名,只需要 open 呼叫返回的指標。
整個系統表包含程序相關資訊,如檔案在磁碟的位置訪問日期和大小。乙個程序開啟乙個檔案,系統開啟檔案表就會為開啟的檔案增加相應的條目。當另乙個
程序執行 open 時,只不過是在其程序開啟表中增加乙個條目,並指向整個系統表的相應條目。通常,系統開啟檔案表的每個檔案時,還用乙個檔案開啟計數器(open
count ),以記錄多少程序開啟了該檔案。每個關閉操作 close 則使得 count 遞減,當開啟計數器為 0 時,表示該檔案不再使用。系統將**分配給該檔案的記憶體空
間等資源,若檔案被修改過,則將檔案寫回外存,並將系統開啟檔案表中相應條目刪除,最後釋放檔案的檔案控制塊(fcb)。
每個開啟檔案都有如下關聯資訊:
》檔案指標:系統跟蹤上次讀寫位置作為當前檔案位置指標,這種指針對開啟檔案的某個程序來說是唯一的,因此必須與磁碟檔案屬性分開儲存。
》檔案開啟計數器:檔案關閉時,作業系統必須重用其開啟檔案表條目,否則表內空間不夠用。因為多個程序可能開啟同乙個檔案,所以系統在刪除開啟檔案條目
之前,必須等待最後乙個程序關閉檔案。該計數器跟蹤開啟和關閉的數量,當該計數為 0 時,系統關閉檔案,刪除該條目。
》檔案磁碟位置:絕大多數檔案操作都要求系統修改檔案資料。該資訊儲存在記憶體中,以免為每個操作都從磁碟中讀取。
》訪問許可權:每個程序開啟檔案都需要有乙個訪問模式(建立、唯讀、讀寫、新增等),該資訊儲存在程序的開啟檔案表中,以便作業系統能允許或拒絕之後的
i / o 請求。
檔案的概念
昨天老師講了c 檔案的操作 訪問的方式 順序讀寫檔案 隨機讀取檔案 檔案流是以外村為輸入輸出物件的資料流 輸出檔案流 從記憶體流向磁碟檔案的資料 輸入檔案流 從磁碟檔案流向記憶體的資料 1.開啟檔案 流類 物件名 檔名,方式 ifstream infile d 1.dat ios in ofstre...
檔案操作概念
檔案讀寫api fgetc fputc 按照字元讀寫檔案 fputs fgets 按照行讀寫檔案 讀寫配置檔案 fread fwrite 按照塊讀寫檔案 大資料塊遷移 1.標準檔案的讀寫 1.1檔案的開啟fopen 檔案的開啟操作表示將給使用者指定的檔案在記憶體分配乙個file結構去,並將該結構的指...
python 檔案概念
1 檔案 file 檔案是用於資料儲存的單位 檔案通常用來長期儲存資料 檔案中的資料是以位元組為單位進行順序儲存的 2 檔案模式 文字模式 把檔案的位元組碼自動轉換為字串,換行符會自動轉換為 n 二進位制模式 通過位元組串 位元組陣列 進行讀寫 3 檔案的操作流程 開啟檔案 讀 寫檔案 關閉檔案 注...