檔案是計算機檔案,屬於檔案的一種,與普通檔案的載體不同,計算機檔案是以計算機硬碟為載體儲存在計算機上的資訊集合。
在程式設計中,我們一般關注的檔案有兩類,即程式檔案和資料檔案。
程式檔案:包括源程式(以.c為字尾)和可執行程式(以.exe為字尾)。
資料檔案:檔案的內容不一定是程式,而是程式執行時讀寫的資料。比如程式執行時需要從中讀取資料的檔案,或者輸出內容的檔案。
注:這裡本篇內容討論的是資料檔案。
乙個檔案要有乙個唯一的檔案標識,以便使用者識別和引用。
檔案標識主要包含三部分:檔案路徑+檔名主幹+檔案字尾。
例如:
但是為了方便起見,檔案標識常被稱為檔名。
根據資料的組織形式,資料檔案被稱為二進位制檔案或文字檔案。
二進位制檔案:資料在記憶體中以二進位制的形式進行儲存,如果不加轉換直接輸出到外存,就是二進位制檔案。
文字檔案:如果要求在外存上以ascii碼的形式儲存,則需要在儲存前進行轉換。以ascii碼的形式進行儲存的檔案就是文字檔案。
那麼乙個資料在外存中是如何儲存的呢?
字元一律以ascii碼值進行儲存;數值型資料既可以以ascii碼值進行儲存,也可以以二進位制的形式進行儲存。
例如,有整數10000,如果我們以ascii值的形式輸出到磁碟,那麼它將在磁碟中占用5個位元組(乙個字元乙個位元組);而如果以二進位制的形式進行輸出,那麼它只在磁碟中占用4個位元組(乙個整型大小即可儲存):
檔案緩衝區是用以暫時存放讀寫期間的檔案資料而在記憶體區預留的一定空間。使用檔案緩衝區可減少讀取硬碟的次數。檔案緩衝系統:是指系統自動地在記憶體中為程式中每乙個正在使用的檔案開闢開闢一塊「檔案緩衝區」。從記憶體向磁碟輸出的資料會先送到記憶體中的緩衝區,待緩衝區裝滿後才一起送到磁碟上。如果從磁碟向計算機讀入資料,則從磁碟檔案中讀取資料輸入到記憶體緩衝區,待緩衝區裝滿後,再從緩衝區逐個地將資料送到程式資料區。緩衝區的大小是根據c編譯系統決定。
為什麼存在緩衝區?
相信有很多人心裡還不理解為什麼存在緩衝區。舉個比較形象的例子,當你的老師在忙於備考時,你有一點小問題就去請教老師,有一點小問題又去請教老師,這種情況下老師的備考效率會大大降低,那麼你為什麼不將你的小問題累計起來,當累計到一定量時再一次性去請教老師,這樣老師的備考效率也會相對提高。
例子中的「老師」就好比作業系統,「小問題」就好比需要作業系統傳輸的資訊,而「你積累問題到一定量再去請教老師」就好比緩衝區的工作機制。
總而言之,緩衝區的存在大大提高了作業系統的效率。
每個被使用的檔案都在記憶體中開闢了乙個相應的檔案資訊區,用來存放檔案的相關資訊(如檔案的名字、檔案的狀態及檔案的當前位置等)。這些資訊是儲存在乙個結構體變數中的,該結構體變數是由系統宣告的,並將該結構體型別重新命名為file。
例如,在vs2013編譯器環境提供的stdio.h標頭檔案中有以下的檔案型別宣告:
struct _iobuf
;typedef
struct _iobuf file;
不同的c編譯器的file型別包含的內容不完全相同,但是都大同小異。
每當我們開啟乙個檔案的時候,系統會根據檔案的情況自動建立乙個file結構的變數,並填充其中的資訊。
我們可以建立乙個file*的指標變數:
file* pf;
//檔案指標變數
定義pf是乙個指向file型別的指標變數,可以使pf指向某個檔案的檔案資訊區,通過該檔案資訊區中的資訊就能夠訪問該檔案。也就是說,通過檔案指標變數就能找到與它關聯的檔案。
比如:
data structure 樹的一些基本概念
定義 乙個樹,每個內部節點,最多只有兩個子節點,每個節點的子節點是有序的,一般稱為left child和right child。遞迴的定義 乙個樹有乙個單個根節點,或者乙個樹其根節點有兩個有序的子節點,每個節點又是乙個二叉樹的根節點。對於非空二叉樹t,n 0 為葉子節點數,而 n 2 是度2節點數,...
Python你必須了解的一些點 靜態方法 類方法
類方法首先和類屬性一樣,類方法也可以進行更細緻的劃分,具體可分為類方法 例項方法和靜態方法。和類屬性的分類不同,對於初學者來說,區分這 3 種類方法是非常簡單的,即採用 classmethod修飾的方法為類方法 採用 staticmethod修飾的方法為靜態方法 不用任何修改的方法為例項方法。靜態方...
必須了解的一些IT知識點
有些知識感覺明白卻說不明白,博主把它定義為似懂非懂 趁著假期,趕緊掃盲!矽 半導體 矽谷 區域網 廣域網 網際網路 域域網 門戶 防火牆 頻寬 摩爾定律 安迪比爾定律 反摩爾定律,風險投資 天使投資 時間戳。矽 是一種化學元素,符號是si,有無定形矽和晶體矽兩種同素異形體,在地殼中,是第二豐富的元素...