1. 程式人生 > >Linux下的IO-one簡述

Linux下的IO-one簡述

lseek 寫文件 pan 讀取 linu 表示 tro linux系統中 一半

什麽是文件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下的IO-one簡述