內容簡介
學會Linux/UNIX高級程式設計才叫大師
本書遵循最新的〝統一UNIX標準版本4〞,以Linux為平台,系統性地說明了UNIX API各種函數的程式設計方法。本書內容包含UNIX的發展歷史與標準、標準I/O和低階I/O、檔案與目錄操作、處理程序環境與處理程序控制、訊號處理、時間與定時、終端I/O、進階I/O、處理程序之間的通訊、通訊端與網路通訊、多執行緒程式設計。
本書遵循最新的〝統一UNIX標準版本4〞,以Linux為平台,系統性地說明了UNIX API各種函數的程式設計方法。本書內容包含UNIX的發展歷史與標準、標準I/O和低階I/O、檔案與目錄操作、處理程序環境與處理程序控制、訊號處理、時間與定時、終端I/O、進階I/O、處理程序之間的通訊、通訊端與網路通訊、多執行緒程式設計。
內容目錄
第01章 UNIX 導論
1.1 UNIX 簡史
1.1.1 UNIX 的誕生
1.1.2 UNIX 的早期發展
1.1.3 BSD UNIX
1.1.4 系統V UNIX
1.1.5 UNIX 的商業化
1.1.6 Linux
1.2 標準
1.2.1 SVID
1.2.2 POSIX
1.2.3 統一UNIX 標準
1.2.4 C 標準
1.3 UNIX 基本概念
1.3.1 程式和處理程序
1.3.2 核心
1.3.3 shell
1.3.4 使用者名稱與使用者ID、使用者群組與群組ID
1.3.5 特權使用者
1.3.6 系統呼叫與函數
1.4 系統函數庫
1.4.1 標頭檔
1.4.2 保留字
1.4.3 特徵測試
1.5 範例程式和編譯環境
1.6 錯誤處理
1.7 系統資訊
1.7.1 機器標識
1.7.2 硬體/ 軟體型態識別
1.8 系統能力限制
1.8.1 一般能力限制值
1.8.2 系統和檔案特徵選項
1.8.3 sysconf()、pathconf() 和 fpathconf() 函
1.9 思考與練習
第02章 標準輸入輸出
2.1 UNIX 輸入輸出基本概念
2.2 流和FILE 物件
2.3 開啟和關閉流
2.4 讀和寫流
2.4.1 字元I/O
2.4.2 行I/O
2.4.3 讀回
2.4.4 區塊I/O
2.5 檔案定位
2.6 檔案結束和錯誤指示器
2.7 流緩衝
2.8 格式I/O
2.8.1 格式輸出
2.8.2 格式輸入
2.9 暫存檔案
2.10 思考與練習
第03章 低階輸入輸出
3.1 檔案描述子的開啟、建立和關閉函數
3.2 read() 和write() 函數
3.3 設定描述子的檔案位置
3.4 dup() 和dup2() 函數
3.5 fdopen() 和fileno() 函數
3.6 檔案控制函數fcntl()
3.6.1 重複檔案描述子呼叫
3.6.2 檔案描述子標籤
3.6.3 檔案狀態標籤
3.7 非阻塞I/O
3.8 readv() 和writev() 函數
3.9 fsync() 和fdatasync() 函數
3.10 思考與練習
第04章 檔案與目錄
4.1 檔案
4.1.1 stat()、fstat() 和lstat()函數
4.2 檔案型態
4.2.1 一般檔案
4.2.2 目錄
4.2.3 連結與link() 函數
4.2.4 符號連結與symlink() 和readlink() 函數
4.2.5 特別檔案
4.2.6 測試檔案的型態
4.3 檔案的擁有者和使用者群組
4.3.1 chown()、fchown() 和lchown() 函數
4.4 檔案規則
4.4.1 檔案存取權限
4.4.2 調整使用者ID 和調整群組ID
4.4.3 sticky 位元
4.4.4 檔案規則位元小結
4.5 確定和改變檔案規則
4.5.1 umask() 函數
4.5.2 chmod() 和fchmod()函數
4.5.3 access() 函數
4.6 檔案大小
4.6.1 截斷檔案
4.7 檔案時間
4.7.1 utime() 和utimes() 函數
4.8 檔案的刪除與重新命名
4.8.1 刪除檔案和目錄
4.8.2 檔案重新命名
4.9 目錄操作
4.9.1 工作目錄
4.9.2 建立目錄
4.9.3 讀取目錄
4.9.4 對目錄流的隨機存取
4.10 思考與練習
第05章 處理程序環境
5.1 main() 函數
5.2 命令列參數
5.2.1 命令列參數的語法約定
5.2.2 掃描命令列中的選項
5.3 環境變數
5.3.1 環境表
5.3.2 存取環境
5.4 終止處理
5.4.1 Exit|Code
5.4.2 終止前的清理
5.4.3 中止程式
5.5 處理程序的儲存空間
5.5.1 處理程序的位址空間
5.5.2 動態儲存裝置分配與釋放
5.5.3 釋放分配的儲存單元
5.6 setjmp() 和longjmp() 函數
5.7 處理程序資源
5.7.1 檢視與設定資源限制
5.7.2 資源使用統計
5.8 使用者資訊
5.8.1 使用者名稱
5.8.2 使用者資料庫
5.8.3 群組資料庫
5.9 處理程序的身份憑證
5.10 調整處理程序的身份
5.11 思考與練習
第06章 處理程序控制
6.1 處理程序標識
6.2 處理程序建立
6.3 執行一個新程式
6.4 等待處理程序完成
6.5 處理程序終止與僵屍處理程序
6.6 system() 函數
6.7 處理程序群組
6.8 階段
6.9 控制終端
6.10 作業控制
6.11 思考與練習
第07章 訊號處理
7.1 訊號概念
7.2 UNIX 訊號
7.2.1 程式錯誤類訊號
7.2.2 程式中止類訊號程式
7.2.3 鬧鈴類訊號
7.2.4 I/O 類訊號
7.2.5 作業控制類訊號
7.2.6 操作錯誤類訊號
7.2.7 其他訊號
7.3 產生訊號
7.3.1 raise() 函數
7.3.2 kill() 函數
7.4 設定訊號的動作
7.4.1 signal() 函數
7.4.2 處理程序啟始時的訊號動作
7.4.3 不可靠訊號
7.4.4 sigaction() 函數
7.5 訊號控制
7.5.1 正常傳回的訊號控制碼
7.5.2 終止處理程序的控制碼
7.6 阻塞訊號
7.6.1 sigset_t 型態和訊號集操作
7.6.2 設定訊號隱藏
7.6.3 檢查擱置訊號
7.7 等待訊號
7.7.1 pause() 函數
7.7.2 sigsuspend() 函數
7.8 使用分開的訊號
7.9 訊號控制碼程式設計技巧
7.9.1 控制碼內非局部控制轉移
7.9.2 可重入函數與非同步訊號安全函數
7.9.3 被訊號中斷的系統呼叫
7.9.4 最小資料
7.10 即時訊號
7.10.1 SA_SIGINFO 標示
7.10.2 發送即時訊號
7.10.3 等待即時訊號
7.11 思考與練習
第08章 時間與定時
8.1 系統時鐘時鐘
8.1.1 time() 函數
8.1.2 gettimeofday() 函數
8.2 時間格式轉換
8.2.1 分解的日曆時間
8.2.2 格式化日期與時間
8.3 CPU 時間與鐘錶時間
8.3.1 clock() 函數
8.3.2 times() 函數
8.4 休眠與定時
8.4.1 sleep() 函數
8.4.2 設定計時器
8.5 即時時鐘與定時
8.5.1 即時時鐘
8.5.2 即時休眠相
8.5.3 即時計時器
8.5.4 建立和刪除即時計時器
8.5.5 設定即時計時器
8.5.6 計時器超期計數
8.6 思考與練習
第09章 終端I/O
9.1 需要改變終端設定的實例
9.2 終端I/O 概述
9.2.1 終端
9.2.2 序列埠
9.2.3 終端裝置檔案
9.2.4 輸入輸出佇列
9.2.5 加工和非加工輸入方式
9.3 GTI 控制介面
9.3.1 termios 資料結構
9.3.2 GTI 控制函數
9.4 終端屬性
9.4.1 輸入方式輸入
9.4.2 輸出方式
9.4.3 控制方式
9.4.4 局部方式
9.4.5 特殊字元
9.4.6 stty 指令
9.5 終端標識
9.6 改變終端屬性
9.7 加工方式與非加工方式輸入
9.7.1 加工方式輸入
9.7.2 非加工方式輸入
9.8 設定串列傳輸速率
9.9 行控制函數
9.10 序列埠程式設計
9.11 思考與練習
第10章 進階I/O1
10.1 檔案鎖
10.1.1 fcntl() 檔案鎖操作
10.1.2 鎖的測試、請求和釋放
10.1.3 檔案鎖與處理程序和檔案的關係
10.1.4 鎖死
10.1.5 建議鎖與強制鎖
10.2 訊號驅動的I/O
10.3 多路轉接I/O
10.3.1 select() 函數
10.3.2 poll() 函數
10.4 非同步I/O
10.4.1 非同步I/O 控制區塊
10.4.2 I/O 完成時的訊號發佈
10.4.3 非同步I/O 的優先順序
10.4.4 非同步I/O 函數
10.4.5 非同步I/O 範例
10.4.6 非同步I/O 注意事項
10.5 儲存映射I/O
10.6 思考與練習
第11章 處理程序間通訊?
11.1 管道
11.1.1 建立管道
11.1.2 父子處理程序間的管道通訊
11.1.3 連接標準輸入和標準輸出的管道
11.1.4 popen() 和pclose() 函數
11.1.5 管道I/O 的不可分割性
11.2 FIFO 特別檔案
11.2.1 建立FIFO
11.2.2 FIFO 操作
11.2.3 FIFO 用於客戶/ 服務通訊
11.3 系統V IPC
11.3.1 關鍵字和標識
11.3.2 IPC 資源描述結構與成員ipc_perm
11.3.3 ipcs 和ipcrm 指令
11.4 訊息佇列
11.4.1 建立和獲得訊息佇列
11.4.2 訊息佇列的查詢、設定和刪除
11.4.3 發送和接收訊息
11.5 共用儲存區段
11.5.1 建立和獲得共用儲存區段
11.5.2 共用儲存區段的查詢、設定和刪除
11.5.3 共用儲存區段的連接和分離
11.6 號誌
11.6.1 建立和獲得號誌標識
11.6.2 號誌的查詢、設定和刪除
11.6.3 號誌操作
11.7 思考與練習
第12章 通訊端及網路通訊
12.1 TCP/IP 協定
12.2 通訊端
12.3 通訊端位址結構
12.3.1 IP 位址
12.3.2 域名位址
12.3.3 服務與通訊埠號
12.3.4 通訊端位址資料結構
12.3.
1.1 UNIX 簡史
1.1.1 UNIX 的誕生
1.1.2 UNIX 的早期發展
1.1.3 BSD UNIX
1.1.4 系統V UNIX
1.1.5 UNIX 的商業化
1.1.6 Linux
1.2 標準
1.2.1 SVID
1.2.2 POSIX
1.2.3 統一UNIX 標準
1.2.4 C 標準
1.3 UNIX 基本概念
1.3.1 程式和處理程序
1.3.2 核心
1.3.3 shell
1.3.4 使用者名稱與使用者ID、使用者群組與群組ID
1.3.5 特權使用者
1.3.6 系統呼叫與函數
1.4 系統函數庫
1.4.1 標頭檔
1.4.2 保留字
1.4.3 特徵測試
1.5 範例程式和編譯環境
1.6 錯誤處理
1.7 系統資訊
1.7.1 機器標識
1.7.2 硬體/ 軟體型態識別
1.8 系統能力限制
1.8.1 一般能力限制值
1.8.2 系統和檔案特徵選項
1.8.3 sysconf()、pathconf() 和 fpathconf() 函
1.9 思考與練習
第02章 標準輸入輸出
2.1 UNIX 輸入輸出基本概念
2.2 流和FILE 物件
2.3 開啟和關閉流
2.4 讀和寫流
2.4.1 字元I/O
2.4.2 行I/O
2.4.3 讀回
2.4.4 區塊I/O
2.5 檔案定位
2.6 檔案結束和錯誤指示器
2.7 流緩衝
2.8 格式I/O
2.8.1 格式輸出
2.8.2 格式輸入
2.9 暫存檔案
2.10 思考與練習
第03章 低階輸入輸出
3.1 檔案描述子的開啟、建立和關閉函數
3.2 read() 和write() 函數
3.3 設定描述子的檔案位置
3.4 dup() 和dup2() 函數
3.5 fdopen() 和fileno() 函數
3.6 檔案控制函數fcntl()
3.6.1 重複檔案描述子呼叫
3.6.2 檔案描述子標籤
3.6.3 檔案狀態標籤
3.7 非阻塞I/O
3.8 readv() 和writev() 函數
3.9 fsync() 和fdatasync() 函數
3.10 思考與練習
第04章 檔案與目錄
4.1 檔案
4.1.1 stat()、fstat() 和lstat()函數
4.2 檔案型態
4.2.1 一般檔案
4.2.2 目錄
4.2.3 連結與link() 函數
4.2.4 符號連結與symlink() 和readlink() 函數
4.2.5 特別檔案
4.2.6 測試檔案的型態
4.3 檔案的擁有者和使用者群組
4.3.1 chown()、fchown() 和lchown() 函數
4.4 檔案規則
4.4.1 檔案存取權限
4.4.2 調整使用者ID 和調整群組ID
4.4.3 sticky 位元
4.4.4 檔案規則位元小結
4.5 確定和改變檔案規則
4.5.1 umask() 函數
4.5.2 chmod() 和fchmod()函數
4.5.3 access() 函數
4.6 檔案大小
4.6.1 截斷檔案
4.7 檔案時間
4.7.1 utime() 和utimes() 函數
4.8 檔案的刪除與重新命名
4.8.1 刪除檔案和目錄
4.8.2 檔案重新命名
4.9 目錄操作
4.9.1 工作目錄
4.9.2 建立目錄
4.9.3 讀取目錄
4.9.4 對目錄流的隨機存取
4.10 思考與練習
第05章 處理程序環境
5.1 main() 函數
5.2 命令列參數
5.2.1 命令列參數的語法約定
5.2.2 掃描命令列中的選項
5.3 環境變數
5.3.1 環境表
5.3.2 存取環境
5.4 終止處理
5.4.1 Exit|Code
5.4.2 終止前的清理
5.4.3 中止程式
5.5 處理程序的儲存空間
5.5.1 處理程序的位址空間
5.5.2 動態儲存裝置分配與釋放
5.5.3 釋放分配的儲存單元
5.6 setjmp() 和longjmp() 函數
5.7 處理程序資源
5.7.1 檢視與設定資源限制
5.7.2 資源使用統計
5.8 使用者資訊
5.8.1 使用者名稱
5.8.2 使用者資料庫
5.8.3 群組資料庫
5.9 處理程序的身份憑證
5.10 調整處理程序的身份
5.11 思考與練習
第06章 處理程序控制
6.1 處理程序標識
6.2 處理程序建立
6.3 執行一個新程式
6.4 等待處理程序完成
6.5 處理程序終止與僵屍處理程序
6.6 system() 函數
6.7 處理程序群組
6.8 階段
6.9 控制終端
6.10 作業控制
6.11 思考與練習
第07章 訊號處理
7.1 訊號概念
7.2 UNIX 訊號
7.2.1 程式錯誤類訊號
7.2.2 程式中止類訊號程式
7.2.3 鬧鈴類訊號
7.2.4 I/O 類訊號
7.2.5 作業控制類訊號
7.2.6 操作錯誤類訊號
7.2.7 其他訊號
7.3 產生訊號
7.3.1 raise() 函數
7.3.2 kill() 函數
7.4 設定訊號的動作
7.4.1 signal() 函數
7.4.2 處理程序啟始時的訊號動作
7.4.3 不可靠訊號
7.4.4 sigaction() 函數
7.5 訊號控制
7.5.1 正常傳回的訊號控制碼
7.5.2 終止處理程序的控制碼
7.6 阻塞訊號
7.6.1 sigset_t 型態和訊號集操作
7.6.2 設定訊號隱藏
7.6.3 檢查擱置訊號
7.7 等待訊號
7.7.1 pause() 函數
7.7.2 sigsuspend() 函數
7.8 使用分開的訊號
7.9 訊號控制碼程式設計技巧
7.9.1 控制碼內非局部控制轉移
7.9.2 可重入函數與非同步訊號安全函數
7.9.3 被訊號中斷的系統呼叫
7.9.4 最小資料
7.10 即時訊號
7.10.1 SA_SIGINFO 標示
7.10.2 發送即時訊號
7.10.3 等待即時訊號
7.11 思考與練習
第08章 時間與定時
8.1 系統時鐘時鐘
8.1.1 time() 函數
8.1.2 gettimeofday() 函數
8.2 時間格式轉換
8.2.1 分解的日曆時間
8.2.2 格式化日期與時間
8.3 CPU 時間與鐘錶時間
8.3.1 clock() 函數
8.3.2 times() 函數
8.4 休眠與定時
8.4.1 sleep() 函數
8.4.2 設定計時器
8.5 即時時鐘與定時
8.5.1 即時時鐘
8.5.2 即時休眠相
8.5.3 即時計時器
8.5.4 建立和刪除即時計時器
8.5.5 設定即時計時器
8.5.6 計時器超期計數
8.6 思考與練習
第09章 終端I/O
9.1 需要改變終端設定的實例
9.2 終端I/O 概述
9.2.1 終端
9.2.2 序列埠
9.2.3 終端裝置檔案
9.2.4 輸入輸出佇列
9.2.5 加工和非加工輸入方式
9.3 GTI 控制介面
9.3.1 termios 資料結構
9.3.2 GTI 控制函數
9.4 終端屬性
9.4.1 輸入方式輸入
9.4.2 輸出方式
9.4.3 控制方式
9.4.4 局部方式
9.4.5 特殊字元
9.4.6 stty 指令
9.5 終端標識
9.6 改變終端屬性
9.7 加工方式與非加工方式輸入
9.7.1 加工方式輸入
9.7.2 非加工方式輸入
9.8 設定串列傳輸速率
9.9 行控制函數
9.10 序列埠程式設計
9.11 思考與練習
第10章 進階I/O1
10.1 檔案鎖
10.1.1 fcntl() 檔案鎖操作
10.1.2 鎖的測試、請求和釋放
10.1.3 檔案鎖與處理程序和檔案的關係
10.1.4 鎖死
10.1.5 建議鎖與強制鎖
10.2 訊號驅動的I/O
10.3 多路轉接I/O
10.3.1 select() 函數
10.3.2 poll() 函數
10.4 非同步I/O
10.4.1 非同步I/O 控制區塊
10.4.2 I/O 完成時的訊號發佈
10.4.3 非同步I/O 的優先順序
10.4.4 非同步I/O 函數
10.4.5 非同步I/O 範例
10.4.6 非同步I/O 注意事項
10.5 儲存映射I/O
10.6 思考與練習
第11章 處理程序間通訊?
11.1 管道
11.1.1 建立管道
11.1.2 父子處理程序間的管道通訊
11.1.3 連接標準輸入和標準輸出的管道
11.1.4 popen() 和pclose() 函數
11.1.5 管道I/O 的不可分割性
11.2 FIFO 特別檔案
11.2.1 建立FIFO
11.2.2 FIFO 操作
11.2.3 FIFO 用於客戶/ 服務通訊
11.3 系統V IPC
11.3.1 關鍵字和標識
11.3.2 IPC 資源描述結構與成員ipc_perm
11.3.3 ipcs 和ipcrm 指令
11.4 訊息佇列
11.4.1 建立和獲得訊息佇列
11.4.2 訊息佇列的查詢、設定和刪除
11.4.3 發送和接收訊息
11.5 共用儲存區段
11.5.1 建立和獲得共用儲存區段
11.5.2 共用儲存區段的查詢、設定和刪除
11.5.3 共用儲存區段的連接和分離
11.6 號誌
11.6.1 建立和獲得號誌標識
11.6.2 號誌的查詢、設定和刪除
11.6.3 號誌操作
11.7 思考與練習
第12章 通訊端及網路通訊
12.1 TCP/IP 協定
12.2 通訊端
12.3 通訊端位址結構
12.3.1 IP 位址
12.3.2 域名位址
12.3.3 服務與通訊埠號
12.3.4 通訊端位址資料結構
12.3.