什麼是檔案io
io就是input/output,輸入/輸出。檔案io的意思就是讀寫檔案。
檔案操作的主要介面api
什麼是作業系統api
(1)api是一些函式,這些函式是由linux系統提供支援的,由應用層程式來使用。
(2)應用層程式通過呼叫api來呼叫作業系統中的各種功能,來幹活。
(3)學習乙個作業系統,其實就是學習使用這個作業系統的api。使用linux系統來讀寫檔案,手段就是學習linux系統api中和檔案io有關的幾個。
linux常用檔案io介面(1)open、close、write、read、lseek
檔案操作的一般步驟
(1)在linux系統中要操作乙個檔案,一般是先open開啟乙個檔案,得到乙個檔案描述符,然後對檔案進行讀寫操作(或其他操作),最後close關閉檔案即可
(2)強調一點:我們對檔案進行操作時,一定要先開啟檔案,開啟成功後才能去操作(如果開啟本身失敗,後面就不用操作了);最後讀寫完成之後一定要close關閉檔案,否則可能會造成檔案損壞。
(3)檔案平時是存在塊裝置中的檔案系統中的,我們把這種檔案叫靜態檔案。當我們去open開啟乙個檔案時,linux核心做的操作包括:核心在程序中建立了乙個開啟檔案的資料結構,記錄下我們開啟的這個檔案;核心在記憶體中申請一段記憶體,並且將靜態檔案的內容從塊裝置中讀取到記憶體中特定位址管理存放(叫動態檔案)。
(4)開啟檔案後,以後對這個檔案的讀寫操作,都是針對記憶體中這乙份動態檔案的,而並不是針對靜態檔案的。當我們對動態檔案進行讀寫後,此時記憶體中的動態檔案和塊裝置中的靜態檔案就不同步了,當我們close關閉動態檔案時,close內部核心將記憶體中的動態檔案的內容去更新(同步)塊裝置中的靜態檔案。
(5)常見的一些現象: 第乙個:開啟乙個大檔案時比較慢 第二個:我們寫了一半的檔案,如果沒有點儲存直接關機/斷電,重啟後檔案內容丟失。
(6)為什麼要這麼設計? 以為塊裝置本身有讀寫限制(回憶nnadflash、sd等塊裝置的讀寫特徵),本身對塊裝置進行操作非常不靈活。而記憶體可以按位元組為單位來操作,而且可以隨機操作(記憶體就叫ram,random),很靈活。所以核心設計檔案操作時就這麼設計了。
重要概念:檔案描述符
(1)檔案描述符其實實質是乙個數字,這個數字在乙個程序中表示乙個特定的含義,當我們open開啟乙個檔案時,作業系統在記憶體中構建了一些資料結構來表示這個動態檔案,然後返回給應用程式乙個數字作為檔案描述符,這個數字就和我們記憶體中維護這個動態檔案的這些資料結構掛鉤繫結上了,以後我們應用程式如果要操作這乙個動態檔案,只需要用這個檔案描述符進行區分。
(2)一句話講清楚檔案描述符:檔案描述符就是用來區分乙個程式開啟的多個檔案的。
(3)檔案描述符的作用域就是當前程序,出了當前程序這個檔案描述符就沒有意義了
Linux歷史的簡述
1 unix的誕生與發展 說到到linux的歷史,unix 也是乙個作業系統,多用作企業 公司的計算機服務 是不得不提的一件事。unix是最早期出現的作業系統之一。1975年,貝爾實驗室的科研技術人員在解決科研問題時開發出來的一套優秀的系統,後來貝爾實驗室以極低的 在美國的大學裡傳播和普及這套系統的...
arc下的block簡述
理解block的核心就在於 當block只使用變數的值時,那麼只需要將變數的值作為實參傳給block中的形參。如果這個變數是乙個指向某個物件的指標,那麼block是strong持有這個物件的。nsarray array 10 void block 當block中會改變變數的值時,那麼需要將變數的位址...
Linux程序簡述
對於程序的建立,系統呼叫fork 允許乙個程序 父程序 建立乙個新程序 子程序 新的程序幾乎就等於父程序的翻版,子程序獲得了父程序的棧,資料段,堆和執行文字段的拷貝。對於程序的終止,則是使用exit status 函式,此函式會將程序所占用的所有資源 記憶體,檔案描述符等 歸還核心,交給核心進行再次...