文章目錄
- 標準 (ANSI C, POSIX, SVID, XPG, ...)
- 線上文檔 (man, info, HOW-TO, ...)
- 庫和標頭檔的儲存位置
標準 (ANSI C, POSIX, SVID, XPG, ...)
- ANSI C:這一標準是 ANSI(美國國家標準局)於 1989 年制定的 C 語言標準。
後來被 ISO(國際標準組織)接受為標準,因此也稱為 ISO C。
ANSI C 的目標是為各種作業系統上的 C 程式提供可移植性保證,而不僅僅限於 UNIX。
該標準不僅定義了 C 程式設計語言的語發和語義,而且還定義了一個標準庫。這個庫可以根據
標頭檔劃分為 15 個部分,其中包括:字元類型 (<ctype.h>)、錯誤碼 (<errno.h>)、
浮點常數 (<float.h>)、數學常數 (<math.h>)、標準定義 (<stddef.h>)、
標準 I/O (<stdio.h>)、工具函數 (<stdlib.h>)、字串操作 (<string.h>)、
時間和日期 (<time.h>)、可變參數表 (<stdarg.h>)、訊號 (<signal.h>)、
非局部跳轉 (<setjmp.h>)、本地資訊 (<local.h>)、程式斷言 (<assert.h>)
等等。
- POSIX:該標準最初由 IEEE 開發的標準族,部分已經被 ISO 接受為國際標準。該標準的具體內容
見 1.1.3。POSIX.1 和 POSIX.2 分別定義了 POSIX 相容作業系統的 C 語言系統介面
以及 shell 和工具標準。這兩個標準是通常提到的標準。POSIX 表示可移植作業系統介面(Portable Operating System Interface ,縮寫為 POSIX 是為了讀音更
像 UNIX)。電氣和電子工程師協會(Institute of Electrical and Electronics Engineers,IEEE)
最初開發 POSIX 標準,是為了提高 UNIX 環境下應用程式的可移植性。然而,POSIX 並不局限於 UNIX。
許多其它的作業系統,例如 DEC OpenVMS 和 Microsoft Windows NT,都支援 POSIX 標準,尤其是
IEEE Std. 1003.1-1990(1995 年修訂)或 POSIX.1,POSIX.1 提供了原始碼層級的 C 語言應用編程
介面(API)給作業系統的服務程式,例如讀寫檔案。POSIX.1 已經被國際標準組織(International
Standards Organization,ISO)所接受,被命名為 ISO/IEC 9945-1:1990 標準。
- SVID:System V 的介面描述。System V 介面描述(SVID)是描述 AT&&;T Unix System V 操作
系統的文檔,是對 POSIX 標準的擴充超集。
- XPG:X/Open 可移植性指南。X/Open 可移植性指南(由 X/Open Company, Ltd.出版),
是比 POSIX 更為一般的標準。X/Open 擁有 Unix 的著作權,而 XPG 則指定成為 Unix
作業系統必須滿足的要求。
Glibc
眾所周知,C 語言並沒有為常見的操作,例如輸入/輸出、記憶體管理,字串操作等提供內建的支援。
相反,這些功能一般由標準的“函數庫”來提供。GNU 的 C 函數庫,即 glibc,是 Linux 上最重要的
函數庫,它定義了 ISO C 標準指定的所有的庫函數,以及由 POSIX 或其他 UNIX 作業系統
統變種指定的附加特色,還包括有與 GNU 系統相關的擴充。目前,流行的 Linux 系統使用 glibc 2.0
以上的版本。glibc 基於如下標準:
- ISO C: C 程式設計語言的國際標準,即 ANSI C。
- POSIX:GNU C 函數庫實現了 ISO/IEC 9945-1:1996 (POSIX 系統API,
即 POSIX.1)指定的所有函數。該標準是對 ISO C 的擴充,包括檔案系統介面原
語、裝置相關的終端控制函數以及進程式控制制函數。同時,GUN C 函數庫還支援部分由
ISO/IEC 9945-2:1993(POSIX Shell 和 工具標準,即 POSIX.2)指定的函數,
其中包括用於處理Regex和模式比對的函數。
- Berkeley Unix:BSD 和 SunOS。GNU C 函數庫定義了某些 UNIX 版本中尚未標準化的函數,
尤其是 4.2 BSD, 4.3 BSD, 4.4 BSD Unix 系統(即“Berkeley Unix”)以及“SunOS”
(流行的 4.2 BSD 變種,其中包含有某些 Unix System V 的功能)。BSD 函數包括
符號連結、select 函數、BSD 訊號處理函數以及通訊端等等。
- SVID:System V 的介面描述。GNU C 函數庫定義了大多數由 SVID 指定而未被 ISO C
和 POSIX 標準指定的函數。來自 System V 的支援函數包括處理序間通訊和共用記憶體、
hsearch 和 drand48 函數族、fmtmsg 以及一些數學函數。
- XPG:X/Open 可移植性指南。GNU C 函數庫遵循 X/Open 可移植性指南(Issue 4.2)
以及所有的 XSI(X/Open 系統介面)相容系統的擴充,同時也遵循所有的 X/Open Unix
擴充。
系統調用
系統調用是作業系統提供給外部程式的介面。在 C 語言中,作業系統的系統調用通常通過
函數調用的形式完成,這是因為這些函數封裝了系統調用的細節,將系統調用的入口、參數以及
傳回值用 C 語言的函數調用過程實現。在 Linux 系統中,系統調用函數定義在 glibc 中。
談到系統調用時,需要注意如下幾點:
- 系統調用函數通常在成功時返回 0 值,不成功時返回非零值。如果要檢查失敗原因,則
要判斷 errno 這個全域變數的值,errno 中包含有錯誤碼。
- 許多系統調用的返回資料通常通過引用參數傳遞。這時,需要在函數參數中傳遞一個
緩衝區地址,而返回的資料就儲存在該緩衝區中。
- 不能認為系統調用函數就要比其他函數的執行效率高。要注意,系統調用是一個非常耗時
的過程。
有關係統調用我們將在以後詳細講述。
線上文檔 (man, info, HOW-TO, ...)1. man
man,即 manunal,是 UNIX 系統手冊的電子版本。根據習慣,UNIX 系統手冊通常分為
不同的部分(或小節,即 section),每個小節闡述不同的系統內容。目前的小節劃分如下:
- 命令:普通使用者命令
- 系統調用:核心介面
- 函數庫調用:普通函數庫中的函數
- 特殊檔案:/dev 目錄中的特殊檔案
- 檔案格式和約定:/etc/passwd 等檔案的格式
- 遊戲。
- 雜項和約定:標準檔案系統布局、手冊頁結構等雜項內容
- 系統管理命令。
- 核心常式:非標準的手冊小節。便於 Linux 核心的開發而包含
其他手冊小節:
- l: PostgreSQL 資料庫命令
- n: TCL/TK 命令
手冊頁一般儲存在 /usr/man 目錄下,其中每個子目錄(如 man1, man2, ..., manl, mann)
包含不同的手冊小節。使用 man 命令查看手冊頁。
man 命令列:
man [-acdfFhkKtwW] [-m system] [-p string] [-C config_file] [-M path] [-P
pager] [-S section_list] [section] name
常用命令列:
$ man open
$ man 7 man
$ man ./myman.3
2. info
Linux 中的大多數軟體開發工具都是來自自由軟體基金會的 GNU 項目,這些工具軟體
件的線上文檔都以 info 檔案的形式存在。info 程式是 GNU 的超文本協助系統。
info 文檔一般儲存在 /usr/info 目錄下,使用 info 命令查看 info 文檔。
要運行 info,可以在 shell 提示符後輸入 info,也可以在 GNU 的 emacs 中鍵入 Esc-x 後跟 info。
info 協助系統的啟動顯示畫面顯示了一個主題目錄,你可以將游標移動到帶有 * 的主題菜單上面,然後按斷行符號鍵
進入該主題,也可以鍵入 m,後跟主題菜單的名稱而進入該主題。例如,你可以鍵入 m,然後再鍵入 gcc 而進
進入 gcc 主題中。
如果你要在主題之間跳轉,則必須記住如下的幾個命令鍵:
* n:跳轉到該節點的下一個節點;
* p:跳轉到該節點的上一個節點;
* m: 指定菜單名而選擇另外一個節點;
* f:進入交叉引用主題;
* l:進入該視窗中的最後一個節點;
* TAB:跳轉到該視窗的下一個超文本連結;
* RET:進入游標處的超文本連結;
* u:轉到上一級主題;
* d:回到 info 的初始節點目錄;
* h:調出 info 教程;
* q:退出 info。
#DEMO#
3. HOW-TO
可供使用者參考的聯機文檔的另一種形式是 HOWTO 檔案,這些檔案位於系統的 /usr/doc/HOWTO 目錄下。
HOWTO 檔案的檔案名稱都有一個 -HOWTO 尾碼,並且都是文字檔。
每一個 HOWTO 檔案包含 Linux 某一方面的資訊,例如它支援的硬體或如何建立一個引導盤。
要想查看這些檔案,進入 /usr/doc/HOWTO 目錄,使用 more 命令,具體形式如下:
$ cd /usr/doc/HOWTO; more topic-name-HOWTO
另外,HOWTO 文檔還有其他格式的檔案,例如 HTML 和 PS 等,儲存在 /usr/doc/HOWTO/other-formats 下。
4. 其他
Linux 的核心文檔一般包含在核心原始碼中,目錄如下:/usr/src/linux-2.x.x/Documentation
/usr/doc 目錄下包含有大量與特定軟體或函數庫相關的說明性文檔。
庫和標頭檔的儲存位置1. 函數庫
- /lib:系統必備共用庫
- /usr/lib:標準共用庫和靜態庫
- /usr/i486-linux-libc5/lib:libc5 相容性函數庫
- /usr/X11R6/lib:X11R6 的函數庫
- /usr/local/lib:本地函數庫
2. 標頭檔
- /usr/include:系統標頭檔
- /usr/local/include:本地標頭檔
POSIX 現在已經發展成為一個非常龐大的標準族,某些部分正處在開發過程中。表 1-1 給出了 POSIX 標準的幾個
重要組成部分。POSIX 與 IEEE 1003 和 2003 家族的標準是可互換的。除 1003.1 之外,1003 和 2003
家族也包括在表中。
1-1 POSIX 標準的重要組成部分
1003.0 |
管理 POSIX 開放式系統內容(OSE)。IEEE 在 1995 年通過了這項標準。 ISO 的版本是 ISO/IEC 14252:1996。 |
1003.1 |
被廣泛接受、用於原始碼層級的可移植性標準。1003.1 提供一個作業系統的 C 語言應 用編程介面(API)。IEEE 和 ISO 已經在 1990 年通過了這個標準,IEEE 在 1995 年 重新修訂了該標準。 |
1003.1b |
一個用於即時編程的標準(以前的 P1003.4 或 POSIX.4)。這個標準在 1993 年 被 IEEE 通過,被合并進 ISO/IEC 9945-1。 |
1003.1c |
一個用於線程(在一個程式中當前被執行的程式碼片段)的標準。以前是 P1993.4 或 POSIX.4 的一部分,這個標準已經在 1995 年被 IEEE 通過,歸入 ISO/IEC 9945-1:1996。 |
1003.1g |
一個關於協議獨立介面的標準,該介面可以使一個應用程式通過網路與另一個應用程式 通訊。 1996 年,IEEE 通過了這個標準。 |
1003.2 |
一個應用於 shell 和 工具軟體的標準,它們分別是作業系統所必須提供的命令處理器 和工具程式。 1992 年 IEEE 通過了這個標準。ISO 也已經通過了這個標準(ISO/IEC 9945-2:1993)。 |
1003.2d |
改進的 1003.2 標準。 |
1003.5 |
一個相當於 1003.1 的 Ada 語言的 API。在 1992 年,IEEE 通過了這個標準。 並在 1997 年對其進行了修訂。ISO 也通過了該標準。 |
1003.5b |
一個相當於 1003.1b(即時擴充)的 Ada 語言的 API。IEEE 和 ISO 都已經通過了 這個標準。ISO 的標準是 ISO/IEC 14519:1999。 |
1003.5c |
一個相當於 1003.1q(協議獨立介面)的 Ada 語言的 API。在 1998 年, IEEE 通過了這個標準。ISO 也通過了這個標準。 |
1003.9 |
一個相當於 1003.1 的 FORTRAN 語言的 API。在 1992 年,IEEE 通過了這個標準, 並於 1997 年對其再次確認。ISO 也已經通過了這個標準。 |
1003.10 |
一個應用於超級計算應用環境架構(Application Environment Profile,AEP)的標準。 在 1995 年,IEEE 通過了這個標準。 |
1003.13 |
一個關於應用環境架構的標準,主要針對使用 POSIX 介面的即時應用程式。 在 1998 年,IEEE 通過了這個標準。 |
1003.22 |
一個針對 POSIX 的關於安全性架構的指南。 |
1003.23 |
一個針對使用者組織的指南,主要是為了指導使用者開發和使用支援操作需求的 開放式系統內容(OSE)架構 |
2003 |
針對指定和使用是否符合 POSIX 標準的測試方法,有關其定義、一般需求和指導方針的 一個標準。在 1997 年,IEEE 通過了這個標準。 |
2003.1 |
這個標準規定了針對 1003.1 的 POSIX 測試方法的供應商要提供的一些條件。 在 1992 年,IEEE 通過了這個標準。 |
2003.2 |
一個定義了被用來檢查與 IEEE 1003.2(shell 和 工具 API)是否符合的測試方法的 標準。在 1996 年,IEEE 通過了這個標準。 |
除了 1003 和 2003 家族以外,還有幾個其它的 IEEE 標準,例如 1224 和 1228,它們
也提供開發可移植應用程式的 API。要想得到關於 IEEE 標準的最新資訊,可以訪問
IEEE 標準的首頁,網址是
http://standard.ieee.org/。
有關 POSIX 標準的概述資訊,請訪問 Web 網站
http://standards.ieee.org/reading/ieee/stad_public/description/posix/。