上帝托夢(mèng)給我說:一切皆文件

后記:這些故事當(dāng)然是我杜撰的,Ken Thompson和Dennis Ritchie在設(shè)計(jì)Unix的時(shí)候,具體是怎么想的,我們無(wú)從知道。TCP/IP協(xié)議也不是Bill Joy在一個(gè)晚上就手寫出來(lái)的。這里只是想對(duì)這些做出偉大貢獻(xiàn)的大神們致以敬意。
我們現(xiàn)在所知道的就是在Unix/Linux上,一切皆是文件,設(shè)備,socket, pipe..... 它們有統(tǒng)一的名字空間和統(tǒng)一的訪問接口,這就實(shí)現(xiàn)了以最小代價(jià)對(duì)系統(tǒng)內(nèi)類型迥異的各種資源的調(diào)用。
當(dāng)一個(gè)“文件”被打開的時(shí)候,一個(gè)文件描述符也會(huì)被創(chuàng)建起來(lái),文件路徑用來(lái)定位這個(gè)文件,文件描述符用來(lái)代表從這個(gè)“文件”中讀寫字節(jié)流的接口。 有時(shí)候文件描述符也可以表示匿名的管道和socket,這時(shí)候并沒有文件路徑, 所以如果更準(zhǔn)確一點(diǎn),我們應(yīng)該說“一切皆文件描述符”
當(dāng)然“一切皆文件”也不是完美的,因?yàn)椴煌脑O(shè)備是有差別性的,“文件”這個(gè)抽象層次比較高,只能提供最基礎(chǔ),最通用的方式來(lái)操作文件,這也是抽象所要付出的代價(jià)。
【本文為51CTO專欄作者“劉欣”的原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)通過作者微信公眾號(hào)coderising獲取授權(quán)】