一、libc庫
Linux平台提供的C標準庫包括:
一組標頭檔,定義了很多類型和宏,聲明了很多庫函數。這些標頭檔放在哪些目錄下取決於不同的編譯器,stdarg.h和stddef.h位於/usr/lib/gcc/i486-linux-gnu/4.3.2/include目錄下,stdio.h、stdlib.h、time.h、math.h、assert.h位於/usr/include目錄下。C99標準定義的標頭檔有24個,本書只介紹其中最基本、最常用的幾個。
一組庫檔案,提供了庫函數的實現。大多數庫函數在libc共用庫中,有些庫函數在另外的共用庫中,例如數學函數在libm中。在第 4 節 “共用庫”講過,通常libc共用庫是/lib/libc.so.6。
ANSI C 函數庫是基本的 C 語言函數庫,包含了 C 語言最基本的庫函數。這個庫可以根據標頭檔劃分為 15 個部分,其中包括:
<ctype.h>:包含用來測試某個特徵字元的函數的函數原型,以及用來轉換大小寫字母的函數原型; <errno.h>:定義用來報告錯誤條件的宏; <float.h>:包含系統的浮點數大小限制; <math.h>:包含數學庫函數的函數原型; <stddef.h>:包含執行某些計算 C 所用的常見的函數定義; <stdio.h>:包含標準輸入輸出庫函數的函數原型,以及他們所用的資訊; <stdlib.h>:包含數字轉換到文本,以及文本轉換到數位函數原型,還有記憶體配置、隨機數字以及其他實用函數的函數原型; <string.h>:包含字串處理函數的函數原型; <time.h>:包含時間和日期操作的函數原型和類型; <stdarg.h>:包含函數原型和宏,用於處理未知數值和類型的函數的參數列表; <signal.h>:包含函數原型和宏,用於處理常式執行期間可能出現的各種條件; <setjmp.h>:包含可以繞過一般函數調用並返回序列的函數的原型,即非局部跳轉; <locale.h>:包含函數原型和其他資訊,使程式可以針對所啟動並執行地區進行修改。 地區的表示方法可以使電腦系統處理不同的資料表達約定,如全世界的日期、時間、美元數和大數字; <assert.h>:包含宏和資訊,用於進行診斷,協助程式調試。 上述庫函數在其各種支援 C 語言的 IDE 中都是有的。 你要是使用fopen/memcpy等等這樣標準C的函數,當然在連結時使用到標準C庫(ANSI C),如果你使用了read/write這些glibc庫實現的函數,肯定就在連結時使用到glibc庫
GNU C 函數庫是一種類似於第三方外掛程式的東西。由於 Linux 是用 C 語言寫的,所以 Linux 的一些操作是用 C 語言實現的,因此,GUN 組織開發了一個 C 語言的庫 以便讓我們更好的利用 C 語言開發基於 Linux 作業系統的程式。不過現在的不同的 Linux 的發行版本對這兩個函數庫有不同的處理方法,有的可能已經整合在同一個庫裡了。
glibc下載地址:http://mirror.hust.edu.cn/gnu/
glibc是linux下面c標準庫的實現,即GNU C Library。glibc本身是GNU旗下的C標準庫,後來逐漸成為了Linux的標準c庫,而Linux下原來的標準c庫Linux libc逐漸不再被維護。Linux下面的標準c庫不僅有這一個,如uclibc(https://www.uclibc.org/)、klibc,以及上面被提到的Linux libc,但是glibc無疑是用得最多的。glibc在/lib目錄下的.so檔案為libc.so.6。
查看當前系統的 glibc 版本的兩種方法:
1.
01 |
[root@Betty ~]# /lib/libc.so.6 |
02 |
GNU C Library stable release version 2.5, by Roland McGrath et al. |
03 |
Copyright (C) 2006 Free Software Foundation, Inc. |
04 |
This is free software; see the source for copying conditions. |
05 |
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A |
07 |
Compiled by GNU CC version 4.1.2 20080704 (Red Hat 4.1.2-52). |
08 |
Compiled on a Linux 2.6.9 system on 2013-01-08. |
10 |
The C stubs add-on version 2.1.2. |
11 |
crypt add-on version 2.1 by Michael Glad and others |
12 |
GNU Libidn by Simon Josefsson |