第一部分 文件和目錄
第1章 編譯程序注釋和選項
1.1 在綫手冊頁
1.2 本書使用的手冊索引
1.2.1 Internet上的man(1)資源
1.3 本書的實例代碼
1.4 編譯C程序
l.4.1 編譯命令
1.5 管理編譯程序警告
1.5.1 利用編譯程序警告信息
1.6 編譯標準
1.6.1 FreeBSD 3.4-Realease特徵測試
l.6.2 HPUX 10.2特徵測試
1.6.3 AIX 4.3特徵測試
1.6.4 SunOS 5.6特徵測試
1.6.5 特徵測試總結
1.7 小結
第2章 UNIX文件係統對象
2.1 文件係統對象
2.1.1 常規文件
2.1.2 目錄
2.1.3 塊設備
2.1.4 字符設備
2.1.5 有名管道(FiFos)
2.1.6 套接口
2.1.7 符號鏈接
2.1.8 特殊文件
2.2 權限
2.2.1 常規文件的訪問
2.2.2 目錄的訪問
2.3 使用UNIX文件
2.3.1 打開和關閉文件
2.3.2 打開特殊文件
2.3.3 使用套接口
2.3.4 復製文件描述符
2.3.5 改變標準輸入
2.4 UNIX文件I/O
2.5 小結
第3章 錯誤處理和報告
3.1 確定是成功還是失敗
3.1.1 齣錯指示的一般規則
3.1.2 一般規則的例外
3.1.3 成功返迴值的分類
3.1.4 其他返迴指示
3.2 確定失敗的原因
3.3 原來的errno值
3.3.1 按名稱引用錯誤代碼
3.3.2 正確使用errno
3.4 新的errno值
3.4.1 聲明新的errno值
3.4.2 使用新的errno值
3.5 報告errno值
3.5.1 使用perrno(3)值
3.5.2 使用sys_errlist[]數組
3.5.3 strerror(3)函數
3.6 使用StdiO(3)測試錯誤
3.6.1 函數ferror(3)的缺陷
3.6.2 避免 fclose(3)的缺陷
3.6.3 推遲錯誤報告
3.7 小結
第4章 UNIX輸入和輸齣
4.1 umask(2)函數和 umask位
4.1.1 權限位
4.1.2 理解對umask的需要
4.1.3 理解umask的作用域
4.1.4 使用 umask(2)函數
4.1.5 使用umask值的例子
4.1.6 umask(2)函數
4.l.7 create(2)函數
4.2 讀和寫
4.2.1 read(2)和write(2)初步
4.2.2 使用 UNIX I/O
4.3 文件內查找
4.3.1 使用lseek(2)
4.4 截取文件
4.5 稀疏文件
4.5.1 創建稀疏文件
4.6 強迫把數據寫到媒介上
4.6.1 sync(2)函數
4.6.2 sync(2)的缺點
4.6.3 fsync(2)函數
4.7 分散讀寫
4.7.1 ready(2)和 writev(2)函數
4.8 確定tty名稱
4.9 小給
第5章 文件上鎖
5.1 理解上鎖類型
5.1.1 文件上鎖技術
5.1.2 文件上鎖的限製
5.1.3 在整個文件中使用勸告性上鎖
5.1.4 使用flock(2)上鎖
5.2 記錄上鎖
5.2.1 使用lockf(2)上鎖
5.3 使用fcntl(2)實現POSIX上鎖
5.3.1 初始化 Struct flock
5.3.2 上鎖一個區域
5.3.3 解鎖區域
5.3.4 獲得上鎖信息
5.4 強製性上鎖
5.4.1 啓用強製性上鎖
5.5 小結
第6章 管理文件及其屬性
6.1 清除文件
6.2 鏈接文件
6.3 移動文件
6.4 獲取文件係統信息
6.4.1 函數stat(2)
6.4.2 函數 fstat(2)
6.4.3 使用文件屬性
6.4.4 測試文件類型
6.4.5 修改、訪問及創建時間
6.5 測試文件的訪問權限
6.6 符號鏈接
6.6.1 函數symlink(2)
6.6.2 函數lstat(2)
6.6.3 利用readlink(2)讀取符號鏈接的內容
6.7 文件權限和所有權
6.7.1 改變權限
6.7.2 改變所有權
6.8 有名管道(FIFO)
6.9 獲得尺寸和配置信息
6.10 小結
第7章 目錄管理
7.1 獲得工作目錄
7.1.1 指定空緩衝區參數
7.2 改變當前目錄
7.2.1 保存當前目錄
7.2.2 fchdir(2)的局限性
7.3 建立新目錄
7.4 刪除目錄
7.5 打開目錄進行搜索
7.6 關閉目錄
7.7 搜索目錄
7.8 重新迴到目錄的開始
7.9 保存目錄中的位置
7.10 在目錄內恢復位置
7.11 掃描目錄
7.11.1 為scandir(3)聲明自己的select函數
7.11.2 為scandir(3)聲明自己的compar函數
7.11.3 sysV變體
7.11.4 scandir(3)實例
7.12 遍曆目錄結構
7.13 改變根目錄
7.14 小結
第8章 臨時目錄和處理清除
8.1 創建臨時文件
8.1.1 使用函數tmpnam(3)
8.1.2 使用函數mktemp(3)
8.1.3 使用函數mkstemp(3)
8.1.4 使用函數mkstemps(3)
8.1.5 使用函數tmpfile(3)
8.1.6 使用函數tempnam(3)
8.2 使文件為臨時文件
8.2.1 使用unlink(2)使文件為臨時文件
8.2.2 退齣清除
8.2.3 使用atexit(3)函數
8.2.4 使用C+十析構函數
8.2.5 利用_exit(2)避免清除
8.3 小結
第二部分 庫函數
第9章 UNIX命令行處理
9.1 命令行約定
9.1.1 使用多個選項
9.1.2 組閤多個選項
9.1.3 使用帶有參數的選項
9.1.4 識彆選項或參數
9.2 選項參數
9.3 函數getopt(3)
9.3.1 getopt(3)外部值
9.3.2 getopt(3)函數調用
9.3.3 定義optstring參數
9.3.4 定義選項處理循環
9.4 函數getsubopt(3)
9.4.1 確定子選項處理的結束
9.4.2 getsuboPt(3)的完整例子
9.5 GNU長選項擴展
9.5.1 GNU getopt_long(3)函數
9.5.2 理解option結構
9.5.3 建立option結構
9.5.4 使用空的option.flap指針
9.5.5 使用非空option.flag指針
9.6 小給
第10章 轉換函數
10.1 簡單的轉換函數
10.1.1 細查函數atoi(3)和atol(3)
10.1.2 atof(3)函數
10.2 使用sscanf(3)轉換和驗證
10.2.1 把sscanf(3)應用到數值轉換
10.2.2 使用sscanf(3)測試數值轉換
10.2.3 改進sscanf(3)轉換
10.2.4 sscanf(3)的局限性
10.3 函數Strtol(3)和Strtoul(3)
10.3.1 使用Strtol(3)函數
10.3.2 齣錯測試
10.3.3 測試轉換指針
10.3.4 多項轉換
10.3.5 使用base參數進行基數轉換
10.3.6 測試溢齣和下溢
10.3.7 測試Strtoul(3)溢齣
10.4 大整數轉換
10.5 BSD的 Strtoq(3)和Strtouq(3)函數
1O.6 strtod(3)函數
10.6.1 使用Strtod(3)函數
10.6.2 測試算術錯誤
10.6.3 算術錯誤測試的流程
10.7 小結
第11章 UNIX日期和時間機製
11.1 時區
11.1.1 世界時間標準初步
11.2 定義日期和時間數據類型
11.3 時間轉換函數
11.3.1 使用ctime(3)把時間轉換為串形式
11.3.2 函數ctime_r(3)
11.3.3 函數localtime(3)和gmtime(3)
11.3.4 struct tm的成員
11.3.5 使用函數asctime(3)把日期/時間成份轉換成串
11.3.6 函數tzset(3)
11.3.7 利用函數mktime(3)創建 Epoch時間
11.4 用strftime(3)定製日期和時間格式
11.4.1 strftime(3)格式說明符
11.4.2 實現DTime:strftime(3)方法
11.4.3 測試類DTime
11.4.4 理解本地設置的作用
11.5 小結
第12章 用戶ID、口令和組管理
12.1 UNIX用戶管理入門
12.1.1 瞭解用戶名和用戶ID號
12.1.2 瞭解用戶名root
12.1.3 組名和組ID號
12.1.4 瞭解gid的0值
12.2 getuid(2)函數和geteuid(2)函數
12.3 getgid(2)函數和getegid(2)函數
12.4 真正的、有效的和已保存的用戶ID
12.4.1 有效的用戶ID
12.4.2 真正的用戶ID
12.4.3 已保存的用戶ID
12.4.4 身份驗證角色概要
12.5 設置用戶ID
12.6 設置組ID
12.7 FreeBSD的issetugid(2)函數
12.8 etc/passwd文件
12.8.1 注釋字段
12.8.2 使用注釋字段的&特徵
12.9 口令數據庫例程
12.9.1 passwd結構
12.9.2 getpwent(3)的錯誤處理
12.9.3 fgetpwent(3)函數
12.9.4 putpwent(3)函數
12.9.5 getpwuid(3)函數
12.9.6 getpwnam(3)函數
12.10 組數據庫
12.10.1 /etC/group文件
12.10.2 getgrent(3)、setgrent(3)和endgrent(3)函數
12.10.3 瞭解group結構
12.10.4 fgetgrent(3)函數
12.10.5 getgrgid(3)函數
12.10.6 getgrnam(3)函數
12.11 相關的重人函數
12.12 輔助組
12.12.1 getgroups(2)函數
12.12.2 使用setgroups(2)函數設置組
12.12.3 為指定的用戶名設置組
12.13 小結
第13章 靜態庫和共享庫
13.1 靜態庫
13.1.1 檢測進程內存映像
13.1.2 實現靜態庫
13.1.3 使用ar(l)命令創建存檔文件
13.1.4 列齣存檔的目錄
13.1.5 獲得存檔的詳細列錶
13.1.6 鏈接靜態庫
13.2 共享庫
13.2.1 靜態庫的局限性
13.2.2 創建共享庫
13.2.3 鏈接共享庫
13.2.4 選擇靜態庫或動態庫
13.2.5 列齣共享庫的引用
13.2.6 動態加載程序
13.2.7 位置無關的代碼
13.2.8 控製共享內容
13.3 靜態庫和共享庫的比較
13.3.1 靜態庫的好處
13.3.2 共享庫的優點
13.4 動態庫加載
13.4.1 打開共享庫
13.4.2 報告錯誤
13.4.3 獲得共享的引用指針
13.4.4 關閉共享庫
13.4.5 初始化和析構
13.4.6 應用動態加載
13.4.7 HPUX 10.2動態庫加載
13.5 小結
第14章 數據庫庫例程
14.1 NDBM數據庫
14.1.1 錯誤處理
14.1.2 打開NDBM數據庫
14.1.3 關閉 NDBM數據庫
14.1.4 存儲信息
14.1.5 獲取信息
14.1.6 刪除信息
14.1.7 訪問所有關鍵字
14.1.8 使用dbm_nextkey(3)函數刪除關鍵字
14.2 NDBM數據庫示例
14.2.1 目錄軟件
14.2.2 Dbm類
14.2.3 InoDb類
14.2.4 SnapShot應用程序
14.2.5 運行SnapShot應用程序
14.2.6 訪問所有的關鍵字並刪除
14.3 小結
第三部分 高級概念
第15章 信號
15.1 瞭解UNIX信號
15.2 可靠的和不可靠的信號
15.3 不可靠的signal(3) API
15.4 可靠的信號API
15.4.1 清空信號集
15.4.2 填充信號集
15.4.3 給信號集添加信號
15.4.4 從信號集中刪除信號
15.4.5 測試一個集閤中的信號
15.4.6 設置信號操作
15.4.7 信號操作標誌
15.4.8 使用可靠的信號
15.5 控製信號
15.5.1 阻塞信號
15.5.2 獲得等待狀態的信號
15.5.3 sigsuspend(2)函數
15.6 應用alarm(3)函數
15.7 從信號處理程序中調用函數
15.7.1 避免重人代碼的問題
15.7.2 在信號處理程序中用errno報告重入的問題
15.8 應用EINTR錯誤代碼
15.9 喚醒信號
15.10 小結
第16章 有效的I/O調度
16.1 非阻塞的I/O
16.1.1 在非阻塞模式下打開文件
16.1.2 設置非阻塞模式
16.1.3 非阻塞的I/O操作
16.1.4 使用非阻塞I/O帶來的問題
16.2 I/O調度國數
16.2.1 文件描述符集閤以及它們的宏
16.2.2 timeval結構
16.2.3 select(2)函數
16.2.4 使用select(2)函數
16.3 I/O輪詢
16.3.1 軟詢事件
16.3.2 輪詢優先級
16.3.3 poll(2)示例
16.4 小結
第17章 計時器
17.1 睡眠函數
17.2 sleeP(3)的UNIX實現
17.2.1 以微秒為單位的睡眠
17.2.2 以納秒為單位的睡眠
17.3 間隔計時器函數
17.3.1 間隔計時器API
17.3.2 間隔計時器宏
17.3.3 間隔計時器的製約
17.3.4 創建隻執行一次的計時器
17.3.5 創建重復計時器
17.4 小結
第18章 管道和進程
18.1 UNIX管道
18.1.1 創建UNIX管道
18.1.2 將管道打開到其他進程
18.1.3 從管道讀取數據
18.1.4 將數據寫到管道
18.1.5 關閉管道
18.1.6 處理已破壞的管道
18.2 不用管道的外部進程
18.2.1 解釋system(3)函數的返迴值
18.2.2 調用命令
18.2.3 仔細考查system(3)函數
18.3 小結
第19章 分支進程
19.1 UNIX分支進程概述
19.1.1 fork(2)函數
19.1.2 使用fork(2)
19.2 等待進程完成
19.2.1 僵進程
19.2.2 wait(2)函數
19.2.3 解釋退齣狀態
19.2.4 其他等待係統調用
19.3 執行新程序
19.4 exec(2)係列的其他成員
19.5 小給
第20章 模式匹配
20.1 shell模式
20.1.1 *元字符
20.1.2 ?元字符
20.1.3 [元字符和]元字符
20.1.4 !元字符
20.1.5 帶有\的轉義字符
20.2 字符串模式函數
20.3 glob(3)函數
20.3.1 glob(3)函數的返迴值
20.4 小結
第21章 正則錶達式
21.1 瞭解正則錶達式
21.1.1 固定符
21.1.2 集閤
21.1.3 範圍
21.1.4 字符類
21.1.5 無字符
21.1.6 加上括號的匹配子錶達式
21.1.7 原子
21.1.8 段
21.1.9 分支
21.1.10 錶達式邊界
21.1.11 引用的字符
21.2 正則錶達式庫
21.2.1 編譯正則錶達式
21.2.2 報告錯誤
21.2.3 釋放正則錶達式
21.2.4 匹配正則錶達式
21.2.5 應用正則錶達式
21.3 小結
第22章 進程間的通信
22.1 IPC的類型
22.2 消息隊列
22.3 共享內存
22.4 信號量
22.5 引用IPC資源
22.5.1 IPC關鍵字值
22.5.2 創建IPC資源
22.5.3 根據IPC關鍵字訪問
22.5.4 根據 IPC ID訪問
22.6 撤銷IPC資源
22.7 小結
第23章 消息隊列
23.1 控製消息隊列
23.1.1 創建消息隊列
23.1.2 訪問消息隊列
23.1.3 撤銷消息隊列
23.1.4 獲得消息隊列的信息
23.1.5 改變消息隊列
23.2 發送消息和接收消息
23.2.1 發送消息
23.2.2 接收消息
23.3 使用消息隊列
23.4 小給
第24章 信號量
24.1 信號量實用程序
24.2 創建和訪問信號量集閤
24.3 撤銷信號量集閤
24.4 控製信號量
24.4.1查詢信號量集閤
24.4.2 更改信號量訪問
24.4.3 查詢信號量的值
24.4.4 查詢整個信號量集閤的值
24.4.5 更改信號量的值
24.4.6 更改整個信號量集閤的值
24.4.7 查詢信號量的進程ID
24.4.8 查詢等待通知的進程數
24.4.9 查詢等待0的進程數
24.5 使用信號量
24.5.1 等待信號量
24.5.2 通知信號量
24.5.3 等待0操作
24.5.4 信號量取消處理
24.5.5 semop實用程序
24.6 小結
第25章 共享內存
25.1 globvar實用程序
25.1.1 創建全局變量池
25.1.2 撤銷全局變量池
25.1.3 globvar環境變量
25.1.4 創建全局變量
25.1.5 訪問全局變量
25.1.6 刪除全局變量
25.1.7 清除全局變量池
25.2 共享內存係統調用
25.2.1 創建和訪問共享內存
25.2.2 獲取共享內存的信息
25.2.3 更改共享內存屬性
25.2.4 連接共享內存
25.2.5 釋放共享內存
25.2.6 撤銷共享內存
25.3 使用共享內存
25.4 小給
第26章 內存映射的文件
26.1 確定頁麵的大小
26.2 創建內存的映射
26.3 控製內存映射的區域
26.3.1 更改訪問保護
26.3.2 通知核心內存的使用情況
26.3.3 查詢內存中的頁麵
26.3.4 同步更改
26.4 撤銷內存映射
26.5 小結
第27章 X Window編程
27.1 事件驅動的編程
27.1.1 事件驅動的模型
27.1.2 客戶/服務器處理
27.1.3 軟件層次
27.2 Xlib客戶程序
27.3 小結
· · · · · · (
收起)