Unix與Windows的思想
-
Unix中的哲學是「一切皆文件」,這裏的一切皆文件是一個普遍的概念,有一些特殊的設備文件,在/dev目錄下shell
- 物理設備在Unix中就對應一個特殊的設備文件,好比打印機就是/dev/lp0,這個設備文件直接與物理設備的串行端口鏈接,只要向這個設備文件中傳入數據,就能夠調用打印機。
- 而沒有與物理設備直接鏈接的特殊的設備文件,稱之爲僞設備文件。僞設備文件通常都是成對出現的,就像是打電話同樣,經過這種邏輯關係就能夠實現與物理設備同樣的功能,好比在僞設備的一端發送一串字符串,在另外一端就會就收到這個字符串,另外一端可能的操做就是將這個字符串原樣返回,或者對其進行加密再返回,在或者將其傳送到/dev/lp0設備文件中調用打印機打印文件。
- 在Unix中命令行中的字符都將會被轉換成爲文件序列(文件流),這樣纔可以實現「一切皆文件」的思想,任何東西均可以被抽象成文件流。
- 在Unix中,要使用命令行,先啓動一個終端,接着啓動一個shell,shell和終端經過pty僞終端設備通訊,也就是在mac下,咱們鼠標點擊terminal這個終端應用程序,在進入到終端的程序以後,會默認啓動一個shell,可是在Windows中倒是用戶只能啓動命令行程序,而不能啓動終端,在Windows中咱們沒有看見過一個terminal程序,只要咱們啓動了一個shell,如cmd或者powershell,Windows會自動爲咱們啓動一個一個的控制檯,將他們依附在一塊兒。
-
Windows中的哲學是「一切皆對象「編程
- 在早期的windows中,其實也是參考着Unix的哲學思想,建立一些特殊的設備文件,好比要打印文件,就將文件輸出到DLT設備文件中就好了,windows中的特殊文件與文件系統是分離的,他們是直接在內核中實現了,全部特殊文件的做用是是全局的,無論是在C:仍是在E:中,都是能夠直接使用PRN名稱的,而不像是其餘文件同樣,須要提供相對路徑或者絕對路徑。
- 後來隨着面向對象思想的發展,Windows開始採用面向對象的思想進行設計,一提到面向對象,就應該聯想到API,全部Windows的」一切皆對象「就是」面向API「編程。可是Windows有爲了兼容老的版本,仍是保留了以前」一切皆文件「的特殊設備文件。因此如今的Windows就有了一個bug,命名的文件去掉擴展名以後不能使Windows爲了兼容而保留的特殊設備文件的文件名,好比aux.txt, aux.h, con.txt等等,其餘他們在Windows中已經用的很少了,在windows都是採用API實現這些了。
- 在命令行程序中鍵入的字符,雖然咱們看到的是和在Unix shell中見到的同樣,都是字符串,可是在回車以後就徹底不聽了,在Unix中會將內容轉換爲文件流,而Windows會將其轉換爲消息進行傳輸,也就是調用等效的API,爲Console API,也就是說,若是咱們如今想要實現一個Powershell,那麼必定會瘋狂的調用Console API。雖然在Unix中寫bash也是調用api的進行系統調用的,可是二者在內部的實現是不一樣的,在Windows中的會將其封裝成對象,接着在調用對象的API,而在Unix中則是直接操做的,沒有加上對象這一層。爲了可以變出跨平臺的程序(以桌面程序爲例),好比qt等,他們提供了統一的接口,在內部實現上調用了兩個操做系統的API。調用Windows的API通常須要獲取句柄,接着經過這個句柄調用對應的函數,而在Unix中就是函數,Windows的API數量是Unix的好幾倍。