1. 程式人生 > >windows與unix思想

windows與unix思想

開始 ons 輸出 路徑 term 需要 沒有 打印機 點擊

Unix與Windows的思想

  • Unix中的哲學是“一切皆文件”,這裏的一切皆文件是一個廣泛的概念,有一些特殊的設備文件,在/dev目錄下
    • 物理設備在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的好幾倍。

windows與unix思想