一切皆文件
"Linux一切皆文件"是Linux操作系統(tǒng)中的一個重要理念和設(shè)計原則。在Linux系統(tǒng)中,幾乎所有的設(shè)備、資源都以文件的形式進(jìn)行訪問和操作。簡化了操作系統(tǒng)的設(shè)計和管理,提供了一種統(tǒng)一的抽象模型,使得應(yīng)用程序可以使用相同的方法和工具來處理各種文件和資源。
在Linux中,不僅普通文件(如文本文件、圖像文件等)被視為文件,還有其他類型的實體也被當(dāng)作文件對待,例如:
設(shè)備文件:Linux將硬件設(shè)備抽象為文件,可以通過設(shè)備文件進(jìn)行訪問和操作。例如,ELF1開發(fā)板的uart7接口可以通過/dev/ttymxc6表示,通過讀寫設(shè)備文件,可以進(jìn)行與硬件設(shè)備的交互。
目錄:目錄也被視為文件,用于組織和存儲其他文件和目錄。通過目錄文件,可以進(jìn)行文件的查找、創(chuàng)建、刪除和移動等操作。
管道(Pipe)和套接字(Socket):Linux提供了管道和套接字機(jī)制,用于不同進(jìn)程之間的通信。管道和套接字也被視為文件,并通過文件描述符進(jìn)行訪問。
虛擬文件系統(tǒng)(Virtual File System):虛擬文件系統(tǒng)是Linux內(nèi)核提供的一種抽象層,用于統(tǒng)一訪問各種文件系統(tǒng)。不同類型的文件系統(tǒng)(如ext4、yaffs等)在虛擬文件系統(tǒng)中被統(tǒng)一處理,使得對文件的操作具有一致的接口和語義。
文件描述符
文件描述符(File Descriptor)通常是一個小的非負(fù)整數(shù),是內(nèi)核為了高效管理已被打開的文件所創(chuàng)建的索引,所有打開文件都由文件描述符引用。
操作系統(tǒng)中的每個進(jìn)程都有一個獨立的文件描述符表,其中存儲了當(dāng)前進(jìn)程打開的所有文件的描述符。文件描述符可以在C語言中使用系統(tǒng)庫函數(shù)(如open、read、write等)來操作,也可以在shell腳本中使用,以便進(jìn)行文件重定向和管道操作。當(dāng)打開或創(chuàng)建文件時,內(nèi)核向進(jìn)程返回一個文件描述符;當(dāng)讀寫文件時,用打開或創(chuàng)建時返回的文件描述符標(biāo)識該文件,作為參數(shù)傳送給read或write函數(shù)。
文件描述符是一個數(shù)組,索引即為文件描述符的值,從0開始,通常系統(tǒng)保留了前3個文件描述符,0、1、2文件描述符分別對應(yīng)標(biāo)準(zhǔn)輸入(stdin)、標(biāo)準(zhǔn)輸出(stdout)和標(biāo)準(zhǔn)錯誤(stderr),其他文件描述符則由操作系統(tǒng)動態(tài)分配。而數(shù)組的每個元素則是一個指向struct file結(jié)構(gòu)體的指針,通過結(jié)構(gòu)體中的操作函數(shù)獲取inode中的文件屬性。