?? basic.html
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"><HTML><HEAD> <TITLE>Linux 的編程常識</TITLE> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb_2312-80"> <META NAME="GENERATOR" CONTENT="StarOffice/5.1 (Linux)"> <META NAME="AUTHOR" CONTENT="Yongming Wei"> <META NAME="CREATED" CONTENT="20000329;17342600"> <META > <STYLE> <!-- H1 { color: #ffff00 } H2 { color: #ffff00 } H3 { color: #ff00ff } H4 { color: #ffff00 } TD P { color: #b880b8 } LI { color: #ffffff } P { color: #00ffff } A:link { color: #00b8ff } A:visited { color: #ff3366 } --> </STYLE></HEAD><BODY TEXT="#ffff00" LINK="#00b8ff" VLINK="#ff3366" BACKGROUND="../images/velvet.jpg"><A HREF="others.html"><IMG SRC="prev.gif" ALT="Previous"></A><A HREF="scenario.html"><IMG SRC="next.gif" ALT="Next"></A><A HREF="index.html"><IMG SRC="toc.gif" ALT="Contents"></A><H1 ALIGN=CENTER>1.4 Linux 的編程常識<BR><BR></H1><UL> <LI><P>標準 (ANSI C, POSIX, SVID, XPG, ...)</LI> <LI><P>函數庫和系統調用</LI> <LI><P>在線文檔 (man, info, HOW-TO, ...)</LI> <LI><P>C 語言編程風格</LI> <LI><P>庫和頭文件的保存位置</LI> <LI><P>共享庫及其相關配置</LI></UL><H3>1.4.1 標準 (ANSI C, POSIX, SVID, XPG, ...)</H3><UL> <LI>ANSI C:這一標準是 ANSI(美國國家標準局)于 1989 年制定的 C 語言標準。 后來被 ISO(國際標準化組織)接受為標準,因此也稱為 ISO C。<BR> 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>) 等等。</LI> <LI>POSIX:該標準最初由 IEEE 開發的標準族,部分已經被 ISO 接受為國際標準。該標準的具體內容 見 1.1.3。POSIX.1 和 POSIX.2 分別定義了 POSIX 兼容操作系統的 C 語言系統接口 以及 shell 和工具標準。這兩個標準是通常提到的標準。</LI> <LI>SVID:System V 的接口描述。System V 接口描述(SVID)是描述 AT&&;T Unix System V 操作 系統的文檔,是對 POSIX 標準的擴展超集。</LI> <LI>XPG:X/Open 可移植性指南。X/Open 可移植性指南(由 X/Open Company, Ltd.出版), 是比 POSIX 更為一般的標準。X/Open 擁有 Unix 的版權,而 XPG 則指定成為 Unix 操作系統必須滿足的要求。</LI></UL><H3>1.4.2 函數庫和系統調用</H3><H4>1. glibc</H4><P>眾所周知,C 語言并沒有為常見的操作,例如輸入/輸出、內存管理,字符串操作等提供內置的支持。相反,這些功能一般由標準的“函數庫”來提供。GNU 的 C 函數庫,即 glibc,是 Linux 上最重要的函數庫,它定義了 ISO C 標準指定的所有的庫函數,以及由 POSIX 或其他 UNIX 操作系統統變種指定的附加特色,還包括有與 GNU 系統相關的擴展。目前,流行的 Linux 系統使用 glibc 2.0 以上的版本。glibc 基于如下標準:</P><UL> <LI>ISO C: C 編程語言的國際標準,即 ANSI C。</LI> <LI>POSIX:GNU C 函數庫實現了 ISO/IEC 9945-1:1996 (POSIX 系統應用程序編程接口, 即 POSIX.1)指定的所有函數。該標準是對 ISO C 的擴展,包括文件系統接口原 語、設備相關的終端控制函數以及進程控制函數。同時,GUN C 函數庫還支持部分由 ISO/IEC 9945-2:1993(POSIX Shell 和 工具標準,即 POSIX.2)指定的函數, 其中包括用于處理正則表達式和模式匹配的函數。</LI> <LI>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 信號處理函數以及套接字等等。</LI> <LI>SVID:System V 的接口描述。GNU C 函數庫定義了大多數由 SVID 指定而未被 ISO C 和 POSIX 標準指定的函數。來自 System V 的支持函數包括進程間通信和共享內存、 hsearch 和 drand48 函數族、fmtmsg 以及一些數學函數。</LI> <LI>XPG:X/Open 可移植性指南。GNU C 函數庫遵循 X/Open 可移植性指南(Issue 4.2) 以及所有的 XSI(X/Open 系統接口)兼容系統的擴展,同時也遵循所有的 X/Open Unix 擴展。</LI></UL><H4>2. 其他重要函數庫</H4><P>除 glibc 之外,流行的 Linux 發行版中還包含有一些其他的函數庫,這些函數庫具有重要地位,例如:</P><UL> <LI>GNU Libtool:GNU Libtool 實際是一個腳本生成工具,它可以為軟件包開發者提供一般性 的共享庫支持。<BR> 以前,如果源代碼包的開發者要利用共享庫的優點,則必須為每個軟件包可支持的平臺編寫 定制的支持代碼。并且還需要設計配置接口,以便軟件包的安裝程序能夠正確選擇要建立的 庫類型。利用 GNU Libtool,則可以簡化開發者的這一工作。它在一個單獨的腳本中同時封裝 了與平臺相關的依賴性以及用戶界面。GNU Libtool 可使每個宿主類型的完整功能可通過 一般性的接口獲得,同時為程序員隱藏了宿主的特殊性。GNU Libtool 一致性接口是可靠的, 用戶不必閱讀那些晦澀的文檔,以便在每個平臺上建立共享庫。他們只需運行軟件包的配置 腳本,而由 libtool 完成繁復的工作。</LI> <LI>CrackLib:CrackLib 為用戶提供了一個 C 語言函數接口,利用這一函數,可避免用戶選擇 容易破解的密碼。該函數庫可在類似 passwd 的程序中使用。</LI> <LI>LibGTop:LibGTop 是一個能夠獲取進程信息以及系統運行信息的函數庫,這些信息包括: 系統的一般信息、SYS V IPC 限制、進程列表、進程信息、進程映射、文件系統使用信息等。</LI> <LI>圖形文件操作函數庫:包括 libungif、libtiff、libpng、Imlib 等,可分別用來操作 GIF、TIFF、PNG 以及其他一些格式圖形文件。</LI></UL><H4>3. 系統調用</H4><P>系統調用是操作系統提供給外部程序的接口。在 C 語言中,操作系統的系統調用通常通過函數調用的形式完成,這是因為這些函數封裝了系統調用的細節,將系統調用的入口、參數以及返回值用 C 語言的函數調用過程實現。在 Linux 系統中,系統調用函數定義在 glibc 中。 </P><P>談到系統調用時,需要注意如下幾點:</P><UL> <LI>系統調用函數通常在成功時返回 0 值,不成功時返回非零值。如果要檢查失敗原因,則 要判斷 errno 這個全局變量的值,errno 中包含有錯誤代碼。</LI> <LI>許多系統調用的返回數據通常通過引用參數傳遞。這時,需要在函數參數中傳遞一個 緩沖區地址,而返回的數據就保存在該緩沖區中。</LI> <LI>不能認為系統調用函數就要比其他函數的執行效率高。要注意,系統調用是一個非常耗時 的過程。</LI></UL><P>有關系統調用我們將在以后詳細講述。</P><H3>1.4.3 在線文檔 (man, info, HOW-TO, ...)</H3><H4>1. man</H4><P>man,即 manunal,是 UNIX 系統手冊的電子版本。根據習慣,UNIX 系統手冊通常分為不同的部分(或小節,即 section),每個小節闡述不同的系統內容。目前的小節劃分如下:</P><OL> <LI>命令:普通用戶命令</LI> <LI>系統調用:內核接口</LI> <LI>函數庫調用:普通函數庫中的函數</LI> <LI>特殊文件:/dev 目錄中的特殊文件</LI> <LI>文件格式和約定:/etc/passwd 等文件的格式</LI> <LI>游戲。</LI> <LI>雜項和約定:標準文件系統布局、手冊頁結構等雜項內容</LI> <LI>系統管理命令。</LI> <LI>內核例程:非標準的手冊小節。便于 Linux 內核的開發而包含</LI></OL><P>其他手冊小節:</P><UL> <LI>l: PostgreSQL 數據庫命令</LI> <LI>n: TCL/TK 命令</LI></UL><P>手冊頁一般保存在 /usr/man 目錄下,其中每個子目錄(如 man1, man2, ..., manl, mann)包含不同的手冊小節。使用 man 命令查看手冊頁。</P><P>man 命令行:<BR>man [-acdfFhkKtwW] [-m system] [-p string] [-C config_file] [-M path] [-P pager] [-S section_list] [section] name<P>常用命令行:<BR>$ man open<BR>$ man 7 man<BR>$ man ./myman.3<BR>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -