第二章 文件操作
1. 在UNIX系統(tǒng)中,對(duì)文件的操作方法有兩種:基于標(biāo)準(zhǔn)庫(kù)函數(shù)的文件操作和基于系統(tǒng)調(diào)用的文件操作,二者應(yīng)用不同,各具優(yōu)勢(shì)。
2. UNIX系統(tǒng)把數(shù)據(jù)存放在文件中,可以通過(guò)系統(tǒng)調(diào)用來(lái)操作文件,這些系統(tǒng)調(diào)用有open、create、read、write、lseek和close。
3. 進(jìn)程對(duì)文件的讀/寫(xiě)都要通過(guò)文件描述符,文件描述符表示文件和進(jìn)程之間的連接。
4. 每次系統(tǒng)調(diào)用都會(huì)導(dǎo)致目態(tài)(用戶(hù)態(tài)),與管態(tài)(核心態(tài))之間的切換以及內(nèi)核代碼的執(zhí)行,所以盡量減少程序中系統(tǒng)調(diào)用發(fā)生的次數(shù)有助于提高程序的運(yùn)行效率。
5. 程序可以通過(guò)緩沖技術(shù)來(lái)減少程序調(diào)用的次數(shù),僅當(dāng)寫(xiě)緩沖區(qū)滿(mǎn)或讀緩沖區(qū)為空時(shí)才調(diào)用內(nèi)核服務(wù)。
6. UNIX內(nèi)核可以通過(guò)內(nèi)核緩沖區(qū)來(lái)減少訪(fǎng)問(wèn)磁盤(pán)I/O的次數(shù)。
7. 磁盤(pán)上有文件和目錄,文件和目錄都是有內(nèi)容和屬性的。文件的內(nèi)容可以是任意的數(shù)據(jù),而目錄的內(nèi)容只能是文件名或目錄名的列表。
8. 目錄中的文件名或目錄名指向文件或其他目錄,內(nèi)核提供了系統(tǒng)調(diào)用來(lái)讀取目錄的內(nèi)容,以及讀取和修改文件的屬性。
9. 文件的類(lèi)型,文件的訪(fǎng)問(wèn)權(quán)限和特殊屬性,被編碼到一個(gè)十六位整數(shù)中,可以通過(guò)掩碼技術(shù)來(lái)讀取這些信息 。
10. UNIX文件系統(tǒng)包含3個(gè)主要部分:超級(jí)塊、i節(jié)點(diǎn)表和數(shù)據(jù)區(qū)域。文件內(nèi)容,存儲(chǔ)在數(shù)據(jù)區(qū),文件屬性存儲(chǔ)在i節(jié)點(diǎn)上。i節(jié)點(diǎn)是文件的唯一標(biāo)識(shí)。
11. 相同的i節(jié)點(diǎn)可能以不同的名字在若干個(gè)目錄中出現(xiàn)。每個(gè)入口被稱(chēng)為指向文件的硬鏈接。符號(hào)連接是通過(guò)文件名引用文件,而不是i節(jié)點(diǎn)號(hào)。
12. 若干個(gè)文件系統(tǒng)的目錄樹(shù)可被整合成一棵樹(shù)。內(nèi)核將一個(gè)文件系統(tǒng)的目錄連接到另一個(gè)文件系統(tǒng)的根的操作稱(chēng)為裝載(掛載)。
13. 磁盤(pán)文件和設(shè)備文件都有名字,屬性和權(quán)限。普通的文件系統(tǒng)調(diào)用open、create、read、write、lseek和close均可被應(yīng)用于設(shè)備文件。文件權(quán)限位以同樣的方式應(yīng)用于控制設(shè)備文件和磁盤(pán)文件的訪(fǎng)問(wèn)。
14. 在處理和傳輸數(shù)據(jù)方面,到磁盤(pán)文件的連接不同于到設(shè)備文件的連接。內(nèi)核中管理與設(shè)備連接的代碼被稱(chēng)為設(shè)備驅(qū)動(dòng)程序。通過(guò)調(diào)用fcntl和ioctl函數(shù),進(jìn)程可以讀取和改變?cè)O(shè)備驅(qū)動(dòng)程序的設(shè)置。
15. 函數(shù)tcgetattr和函數(shù)tcsetattr專(zhuān)門(mén)用來(lái)提供對(duì)終端驅(qū)動(dòng)器的控制。