Programming
Unix 程式到底是什麼意思?
我以為我理解了Unix 程式這個術語的含義,但是現在,在核心/C 程式上下文中閱讀了它之後,我覺得我需要澄清這個術語的含義。
我不清楚這是否意味著:
- 外殼程式,
- Unix程式工具,
- Unix命令行工具程式的特定方式/模式(例如,同意“Unix shell程式”的管道方式),或
- 別的東西。
“Unix 程式”是指為 Unix 環境顯式程式。這將包括為符合相關標準(例如POSIX)的 shell 程式。但是,它還包括任何語言的程式,同時明確使用類似標準化的系統介面和資源,假設這些是特定於 *nix 世界的。
例如,沒有 C 或 C++ 第三方庫的網路程式是不可移植的,因為這兩個標準都沒有說明它。C/C++ 中的網路是使用作業系統指定的介面實現的,而在 *nix-ish 系統上,這或多或少是通用的,您不能將該程式碼原封不動地移植到(例如)Windows,反之亦然。因此,在 C 或 C++ 中進行網路工作意味著使用可移植庫或針對平台,而 Unix 在後一種情況下是一種可能性,因此,這就是“unix 程式”(以及 C 或 C++ 程式和網路程式)。1
然而,許多高級語言(如 perl、python 或 java)的網路程式是可移植的。這些語言通常用 C 實現,但是雖然實現的細節因平台而異,但介面卻沒有。因此,您可以用 perl 編寫網路程式碼,該程式碼應該在執行 perl 的任何系統上執行;在 Unix 系統上,這由解釋器實現翻譯成適當的本機呼叫,而在 Windows 系統上,它的翻譯方式不同。由於您的實際 perl 程式碼不是特定於 perl 的,因此它不是 unix 程式。它是網路程式和 perl 程式,但不是 unix 程式。
- 由於 C 和 Unix 之間密切的歷史關係,事實上 C 一直是最常用的編寫作業系統的語言,以及“作業系統”的本質,這個類別中有很多東西”作業系統特定的 C 程式”——除了網路之外的另一個日常範例是面向文件系統的東西,例如統計文件和讀取目錄。因此,周圍有各種“C 中的 Unix 程式”類型的書籍,因為 C 中的基本程式不可避免地涉及許多作業系統特定的元素。對於 perl 或 java 等更可移植的語言,情況並非如此。在這種情況下,本書的主題可能是“ Perl 中的系統程式”,或者更可能是簡單的“使用 Perl 程式”。