本書遵循最新的『統一UNIX 標準版本4』, 以Linux 為平台,系統性地說明了UNIX API 各種函數的程式設計方法。內容包含UNIX 的發展歷史與標準、標準I/O和低階I/O、檔案與目錄操作、處理程序環境與處理程序控制、訊號處理、時間與定時、終端I/O、進階I/O、處理程序之間的通訊、通訊端與網路通訊、多執行緒程式設計。
本書在介紹UNIX API 各種函數的功能和用途的同時,清晰地闡述了它們所隱含的作業系統基本原理。書中列出了大量程式設計範例程式,有助於讀者更進一步地熟練這些函數的功能、使用方法及程式設計技巧。
UNIX/Linux 流行起來這十年間,影響UNIX 程式設計介面的標準和標準發生了很大的變化,當時大家學習參考的Single UNIX Specification 2 現在已發展到Single UNIX Specification 4,而許多分離獨立的標準和標準,包含Single UNIXSpecification,現在都已經統一在POSIX.1-2008 標準之下了。隨著Linux 系統的成熟和發展,UNIX 系統已不再是少數大型主機和伺服器的專利。任何一個使用電腦的人現在都能安裝和使用Linux,進一步使得用UNIX 程式設計介面開發應用的人也越來越多。
本書適合讀者:
☉從事應用軟體的開發者
☉從事系統軟體的開發者
☉相關課程的大專院校的師生
本書針對較新的Linux 的內容如下:
1) 調整個別介面使之遵循POSIX.1-2008 標準。
2) 考慮到許多嵌入式應用的需要,新增了即時訊號處理、即時時脈與定時。
3) 因為多核心多執行緒微處理器和並行處理已經相當普及,多執行緒程式
設計對應用軟體開發已經非常重要,為此本書的內容專門介紹執行緒。
4) 增強了非同步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.5 位元組順序
12.4 命名通訊端
12.5 通訊端通訊模式
12.6 流通訊端操作
12.6.1 請求連接
12.6.2 接收連接
12.6.3 getsockname() 和getpeername() 函數
12.6.4 多客戶服務
12.6.5 send() 和recv() 函數
12.7 通訊端選項
12.8 頻外資料
12.8.1 TCP 頻外資料
12.8.2 頻外資料的發送和接收
12.8.3 頻外資料標示
12.9 資料通訊端操作
12.9.1 sendto() 和recvfrom()函數
12.9.2 資料通訊端客戶/ 服務範例
12.9.3 使用connect() 函數
12.10 逾時處理
12.11 思考與練習
第13章 執行緒
13.1 執行緒概念
13.1.1 什麼是執行緒
13.1.2 執行緒的好處
13.1.3 Pthreads 執行緒
13.1.4 執行緒標識
13.2 建立執行緒
13.3 終止執行緒
13.3.1 等待中的執行緒終止
13.3.2 可匯合與分離的執行緒
13.4 建立特殊屬性的執行緒
13.5 互斥變數
13.5.1 互斥變數的初始化和銷毀
13.5.2 互斥變數屬性
13.5.3 互斥變數的加鎖與解鎖
13.5.4 互斥變數與spin 鎖
13.6 讀寫鎖
13.6.1 讀寫鎖的初始化和銷毀
13.6.2 讀寫鎖的上鎖與解鎖
13.7 條件變數
13.7.1 建立和銷毀條件變數
13.7.2 條件變數屬性
13.7.3 等待條件變數
13.7.4 喚醒條件變數等待
13.8 思考與練習
第14章 執行緒進階特徵
14.1 執行緒專有資料
14.1.1 執行緒專有資料鍵的建立和刪除
14.1.2 使用執行緒專有資料
14.2 取消執行緒
14.2.1 執行緒的可取消屬性
14.2.2 取消執行緒與取消點
14.2.3 非同步取消的安全性
14.2.4 現場清理
14.3 執行緒排程
14.3.1 執行緒排程競爭範圍
14.3.2 排程策略與優先順序
14.3.3 執行緒排程屬性
14.3.4 動態改變執行緒的排程策略和優先順序
14.4 執行緒與訊號
14.4.1 訊號動作
14.4.2 訊號隱藏
14.4.3 向執行緒發送訊號
14.4.4 等待訊號
14.4.5 一種新的事件通知方法:SIGEV_THREAD
14.5 思考與練習
第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 錯誤處理
...
購物須知
退換貨說明:
會員均享有10天的商品猶豫期(含例假日)。若您欲辦理退換貨,請於取得該商品10日內寄回。
辦理退換貨時,請保持商品全新狀態與完整包裝(商品本身、贈品、贈票、附件、內外包裝、保證書、隨貨文件等)一併寄回。若退回商品無法回復原狀者,可能影響退換貨權利之行使或須負擔部分費用。
訂購本商品前請務必詳閱退換貨原則。