当前位置:Linux教程 - 编程技术 - 编程技术 - GNU - linux的C函数库介绍

编程技术 - GNU - linux的C函数库介绍

GNU/linux的C函数库介绍
2004-04-23 15:18 pm
来自:Linux文档
现载:Www.8s8s.coM
地址:无名

在 GNU/linux 系統中,其 C 函式庫的發展史點出了 GNU/Linux 演進的幾個重要里程碑,由此可以突顯出 C 函式庫在系統中的地位與重要性。早期的 GNU/Linux 系統並不支援可分享函式庫,因此所有的應用程式都是以靜態連結的方式存於系統中。直到 1995-1996 年 libc5 問世以後,系統才開始支援 ELF 可分享函式庫,同時該版的 C 函式庫也實作了其他 UNIX 上大部分的功能與函式群,可謂 GNU/Linux 發展上的一大進步。

然而 libc5 在程式國際化 (I18N) 與本土化 (L10N) 方面的支援很差,故那個時候若要開發所謂中文化的程式,就非得自行實作一套標準不可。直到一兩年後, GNU/linux 換用了 GNU 所開發的 glibc-2.0 做為其 C 函式庫後,其國際化與本土化的支援才開始起步,後來歷經 glibc-2.1,到了現在的 2.2 版,整個多國語文的開發環境才大至成熟。

採用 glibc 做為系統的 C 函式庫,是 GNU/linux 演進的一個重要里程碑。在 GNU 的計畫中,開發 glibc 原本是要給他們尚未問世的核心 GNU/Hurd 用的,由於當時幾乎 99% 的 GNU 系統工具已開發完成,就獨缺核心 Hurd,而恰巧 Linux 核心在 Torvalds 的帶領下已逐漸成熟穩定,而且可以順利執行所有的 GNU 系統工具。故 GNU 團隊便順應 Linux 核心的特性,改寫了他們的 glibc,使其可以適用於 Hurd 核心與 Linux 核心。如此,在這兩個平台上就有了一致的程式開發環境,使得所有的 GNU 程式可以在這兩個平台之間順利移植。

比起過去的 libc5,glibc 系列 (一般又稱之為 libc6) 除了有完整的國際化與本土化支援外,同時還符合許多標準與規格,使得在 glibc 下開發的程式可以很容易移植到其他 UNIX 平台去。這些標準包括:


ISO C:
ISO C 是 International Standard for the C programming language 的縮寫,此標準明定了 C 語言的語法,標準 C 函式庫應具備那些標頭檔、巨集定義、函式與物件 .... 等等,幾乎在任何平台上的 C 語言 (包括非 UNIX 平台) 都支援此標準。

POSIX:
POSIX 是 Portable Operating System Interface for Computer Environments 的縮寫,它是 ISO C 的延伸,明定了一個可移植的作業系統所應具備種種條件,其範圍不只有系統函式庫而已,還同時包括一些標準的工具程式、系統核心應有的特色與實作、以及在 C 函式庫中某些與作業系統相關的低階控制支援 (如系統呼叫窗口) 等等。由於 glibc 是完全按照 POSIX 的標準來實作的,同時搭配了符合 POSIX 標準的 linux 核心,故在此環境下開發的程式可以做到完全符合 POSIX 的規格。

Berkeley Unix:
Berkeley Unix 泛稱柏克萊大學所開發的 UNIX 系列作業系統,包括 4.2 BSD、4.3 BSD、4.4 BSD 以及早期的 SunOS。這些系統的 C 函式庫中有許多傑出的設計,但卻沒有在上述兩個標準中,包括 select() 函式、sockets .... 等等,這些在 glibc 中都有支援。

SVID:
SVID 是 System V Interface Description 的縮寫,它是一份描述 AT&T UNIX System V 系統規格的文件,它是 POSIX 標準的延伸。Glibc 實作了大部分的 SVID 規格要求,其中較重要的包括了行程之間的通訊標準以及分享式記憶體 (shared memory),至於其他的部分則較不常使用。實作 SVID 主要的目的是希望可以做到與 UNIX System V 的相容與程式的可移植性。

XPG:
XPG 是 X/Open Portability Guide 的縮寫,是由 X/Open Company, Ltd. 所發表,同時 X/Open 還擁有 UNIX 商標的版權。而這份規格不但是 POSIX 標準的擴充,同時也明定了一個 UNIX 作業系統所應符合的要求。其中包括了 iconv() 字集轉換介面,以及部分 BSD 與 SVID 的特色。
除了上述的規格外,glibc 還內含了 GNU 特有的特色,稱之為 GNU Extension。這些特色在某些情況下可以方便程式的撰寫與維護,但就不見得可以移植到其他 UNIX 平台上,故在可移植性的考量下使用時必須留意。