|  | |
| Linux中的文件及文件描述符 | |
| Linux操作系統(tong)都是(shi)基(ji)于文(wen)(wen)件(jian)(jian)(jian)概念的(de)(de),文(wen)(wen)件(jian)(jian)(jian)是(shi)以字(zi)符(fu)序(xu)列構成的(de)(de)信息載體。根據這一(yi)點,可(ke)以把I/O設備(bei)當做文(wen)(wen)件(jian)(jian)(jian)來處(chu)理。因此(ci),與磁盤(pan)上的(de)(de)普(pu)通文(wen)(wen)件(jian)(jian)(jian)進行交互所用的(de)(de)同一(yi)系統(tong)調用可(ke)以直(zhi)接用于I/O設備(bei)。這樣大大簡化(hua)了系統(tong)對不(bu)同設備(bei)的(de)(de)處(chu)理,提高(gao)了效率。Linux中(zhong)的(de)(de)文(wen)(wen)件(jian)(jian)(jian)主要分為(wei)4種(zhong):普(pu)通文(wen)(wen)件(jian)(jian)(jian)、目錄(lu)文(wen)(wen)件(jian)(jian)(jian)、鏈接文(wen)(wen)件(jian)(jian)(jian)和設備(bei)文(wen)(wen)件(jian)(jian)(jian)。 那么,內核如何區(qu)分和(he)引用(yong)特定的(de)文件(jian)(jian)(jian)(jian)呢?這里用(yong)到了一(yi)(yi)個(ge)重要的(de)概(gai)念——文件(jian)(jian)(jian)(jian)描(miao)(miao)述(shu)符(fu)。對于Linux而言,所有對設備和(he)文件(jian)(jian)(jian)(jian)的(de)操作都(dou)是使用(yong)文件(jian)(jian)(jian)(jian)描(miao)(miao)述(shu)符(fu)來進(jin)行(xing)的(de)。文件(jian)(jian)(jian)(jian)描(miao)(miao)述(shu)符(fu)是一(yi)(yi)個(ge)非負的(de)整數,它是一(yi)(yi)個(ge)索引值(zhi),并指向在內核中(zhong)每個(ge)進(jin)程打開文件(jian)(jian)(jian)(jian)的(de)記錄表(biao)。當打開一(yi)(yi)個(ge)現存(cun)文件(jian)(jian)(jian)(jian)或創建(jian)一(yi)(yi)個(ge)新文件(jian)(jian)(jian)(jian)時,內核就向進(jin)程返回一(yi)(yi)個(ge)文件(jian)(jian)(jian)(jian)描(miao)(miao)述(shu)符(fu);當需要讀寫文件(jian)(jian)(jian)(jian)時,也需要把文件(jian)(jian)(jian)(jian)描(miao)(miao)述(shu)符(fu)作為參數傳遞給相(xiang)應的(de)函(han)數。 通常(chang),一個(ge)進程啟動(dong)時,都會打開3個(ge)文件:標準(zhun)(zhun)輸入(ru)、標準(zhun)(zhun)輸出和標準(zhun)(zhun)出錯處理(li)。這3個(ge)文件分別對(dui)應(ying)文件描述(shu)符為0、1和2(也就是(shi)宏(hong)替換(huan)(huan)STDIN_FILENO、STDOUT_FILENO和STDERR_FILENO,鼓勵(li)讀者(zhe)使用這些(xie)宏(hong)替換(huan)(huan))。 基于文件描述符(fu)的I/O操(cao)作(zuo)(zuo)雖然不能直(zhi)接移植到類Linux以外的系(xi)統上(如Windows),但它往(wang)往(wang)是(shi)實(shi)現某些I/O操(cao)作(zuo)(zuo)的唯一途徑,如Linux中(zhong)低層文件操(cao)作(zuo)(zuo)函數、多(duo)路(lu)I/O、TCP/IP套接字編(bian)程接口等。同時,它們(men)也(ye)很(hen)好(hao)(hao)地兼(jian)容Posix標準,因此,可以很(hen)方便地移植到任何Posix平臺上。基于文件描述符(fu)的I/O操(cao)作(zuo)(zuo)是(shi)Linux中(zhong)常用的操(cao)作(zuo)(zuo)之一,希望(wang)讀者能夠(gou)很(hen)好(hao)(hao)掌(zhang)握。 本文選自華清遠見嵌入式培訓教材《從實踐中學嵌入式Linux應用程序開發》 熱點鏈接:         
         1、Linux文件系統之虛擬文件系統(VFS) |