Linux/UNIX係統編程接口專業巨著,無齣其右;涵蓋500多個係統調用和庫函數;示例清晰完整,解釋巨細靡遺;涵蓋當前UNIX標準(POSI X.1-2001/SUS v3和POSI X.1-2008/SUS v4);眾多業內專傢人士聯袂推薦;Linux/UNIX開發人員的案頭必備,注定成為新的經典。
《Linux/UNIX係統編程手冊(套裝上下冊)》是介紹Linux與UNIX編程接口的專業著作。Linux編程資深專傢MichaelKerrisk在書中詳細描述瞭Linux/UNIX係統編程所涉及的係統調用和庫函數,並輔之以全麵而清晰的代碼示例。《Linux/UNIX係統編程手冊(上、下冊)》涵蓋瞭逾500個係統調用及庫函數,並給齣逾200個程序示例,另含88張錶格和115幅示意圖。
《Linux/UNIX係統編程手冊(套裝上下冊)》總共分為64章,主要講解瞭高效讀寫文件,對信號、時鍾和定時器的運用,創建進程、執行程序,編寫安全的應用程序,運用POSIX綫程技術編寫多綫程程序,創建和使用共享庫,運用管道、消息隊列、共享內存和信號量技術來進行進程間通信,以及運用套接字API編寫網絡應用等內容。
《Linux/UNIX係統編程手冊(套裝上下冊)》在匯聚大批Linux專有特性(epoll、inotify、/proc)的同時,還特意強化瞭對UNIX標準(POSIX、SUS)的論述,徹底達到瞭“魚與熊掌,二者得兼”的效果,這也堪稱本書的大亮點。
《Linux/UNIX係統編程手冊(套裝上下冊)》布局閤理,論述清晰,說理透徹,尤其是作者對示例代碼的構思巧妙,獨具匠心,仔細研讀定會受益良多。本書適閤從事Linux/UNIX係統開發、運維工作的技術人員閱讀,同時也可作為高校計算機專業學生的參考研習資料。
上冊
第1章 曆史和標準
1.1 UNIX和C語言簡史
1.2 Linux簡史
1.2.1 GNU項目
1.2.2 Linux內核
1.3 標準化
1.3.1 C編程語言
1.3.2 首個POSIX標準
1.3.3 X/Open公司和The Open Group
1.3.4 SUSv3和POSIX.1-2001
1.3.5 SUSv4和POSIX.1-2008
1.3.6 UNIX標準時間錶
1.3.7 實現標準
1.3.8 Linux、標準、Linux標準規範(Linux Standard Base)
1.4 總結
第2章 基本概念
2.1 操作係統的核心-內核
2.2 shell
2.3 用戶和組
2.4 單根目錄層級、目錄、鏈接及文件
2.5 文件I/O模型
2.6 程序
2.7 進程
2.8 內存映射
2.9 靜態庫和共享庫
2.10 進程間通信及同步
2.11 信號
2.12 綫程
2.13 進程組和shell任務控製
2.14 會話、控製終端和控製進程
2.15 僞終端
2.16 日期和時間
2.17 客戶端服務器架構
2.18 實時性
2.19 /proc文件係統
2.20 總結
第3章 係統編程概念
3.1 係統調用
3.2 庫函數
3.3 標準C語言函數庫;GNU C語言函數庫(glibc)
3.4 處理來自係統調用和庫函數的錯誤
3.5 關於本書示例程序的注意事項
3.5.1 命令行選項及參數
3.5.2 常用的函數及頭文件
3.6 可移植性問題
3.6.1 特性測試宏
3.6.2 係統數據類型
3.6.3 其他的可移植性問題
3.7 總結
3.8 練習
第4章 文件I/O:通用的I/O模型
4.1 概述
4.2 通用I/O
4.3 打開一個文件:open
4.3.1 open調用中的flags參數
4.3.2 open函數的錯誤
4.3.3 creat係統調用
4.4 讀取文件內容:read
4.5 數據寫入文件:write
4.6 關閉文件:close
4.7 改變文件偏移量:lseek
4.8 通用I/O模型以外的操作:ioctl
4.9 總結
4.10 練習
第5章 深入探究文件I/O
5.1 原子操作和競爭條件
5.2 文件控製操作:fcntl
5.3 打開文件的狀態標誌
5.4 文件描述符和打開文件之間的關係
5.5 復製文件描述符
5.6 在文件特定偏移量處的I/O:pread和pwrite
5.7 分散輸入和集中輸齣(Scatter-Gather I/O):readv和writev
5.8 截斷文件:truncate和ftruncate係統調用
5.9 非阻塞I/O
5.10 大文件I/O
5.11 /dev/fd目錄
5.12 創建臨時文件
5.13 總結
5.14 練習
第6章 進程
6.1 進程和程序
6.2 進程號和父進程號
6.3 進程內存布局
6.4 虛擬內存管理
6.5 棧和棧幀
6.6 命令行參數(argc, argv)
6.7 環境列錶
6.8 執行非局部跳轉:setjmp和longjmp
6.9 總結
6.9 練習
第7章 內存分配
7.1 在堆上分配內存
7.1.1 調整program break:brk和sbrk
7.1.2 在堆上分配內存:malloc和free
7.1.3 malloc和free的實現
7.1.4 在堆上分配內存的其他方法
7.2 在堆棧上分配內存:alloca
7.3 總結
7.4 練習
第8章 用戶和組
8.1 密碼文件:/etc/passwd
8.2 shadow密碼文件:/etc/shadow
8.3 組文件:/etc/group
8.4 獲取用戶和組的信息
8.5 密碼加密和用戶認證
8.6 總結
8.7 練習
第9章 進程憑證
9.1 實際用戶ID和實際組ID
9.2 有效用戶ID和有效組ID
9.3 Set-User-ID和Set-Group-ID程序
9.4 保存set-user-ID和保存set-group-ID
9.5 文件係統用戶ID和組ID
9.6 輔助組ID
9.7 獲取和修改進程憑證
9.7.1 獲取和修改實際、有效和保存設置標識
9.7.2 獲取和修改文件係統ID
9.7.3 獲取和修改輔助組ID
9.7.4 修改進程憑證的係統調用總結
9.7.5 示例:顯示進程憑證
9.8 總結
9.9 習題
第10章 時間
10.1 日曆時間(Calendar Time)
10.2 時間轉換函數
10.2.1 將time_t轉換為可打印格式
10.2.2 time_t和分解時間之間的轉換
10.2.3 分解時間和打印格式之間的轉換
10.3 時區
10.4 地區(Locale)
10.5 更新係統時鍾
10.6 軟件時鍾(jiffies)
10.7 進程時間
10.8 總結
10.9 練習
第11章 係統限製和選項
11.1 係統限製
11.2 在運行時獲取係統限製(和選項)
11.3 運行時獲取與文件相關的限製(和選項)
11.4 不確定的限製
11.5 係統選項
11.6 總結
11.7 練習
第12章 係統和進程信息
12.1 /proc文件係統
12.1.1 獲取與進程有關的信息:/proc/PID
12.1.2 /proc 目錄下的係統信息
12.1.3 訪問/proc文件
12.2 係統標識:uname
12.3 總結
12.4 練習
第13章 文件I/O緩衝
13.1 文件I/O的內核緩衝:緩衝區高速緩存
13.2 stdio庫的緩衝
13.3 控製文件I/O的內核緩衝
13.4 I/O緩衝小結
13.5 就I/O模式嚮內核提齣建議
13.6 繞過緩衝區高速緩存:直接I/O
13.7 混閤使用庫函數和係統調用進行文件I/O
13.8 總結
13.9 練習
第14章 係統編程概念
14.1 設備專用文件(設備文件)
14.2 磁盤和分區
14.3 文件係統
14.4 i節點
14.5 虛擬文件係統(VFS)
14.6 日誌文件係統
14.7 單根目錄層級和掛載點
14.8 文件係統的掛載和卸載
14.8.1 掛載文件係統:mount
14.8.2 卸載文件係統:umount和umount2
14.9 高級掛載特性
14.9.1 在多個掛載點掛載文件係統
14.9.2 多次掛載同一掛載點
14.9.3 基於每次掛載的掛載標誌
14.9.4 綁定掛載
14.9.5 遞歸綁定掛載
14.10 虛擬內存文件係統:tmpfs
14.11 獲得與文件係統有關的信息:statvfs
14.12 總結
14.13 練習
第15章 文件屬性
15.1 獲取文件信息:stat
15.2 文件時間戳
15.2.1 使用utime和utimes來改變文件時間戳
15.2.2 使用utimensat和futimens改變文件時間戳
15.3 文件屬主
15.3.1 新建文件的屬主
15.3.2 改變文件屬主:chown、fchown和lchown
15.4 文件權限
15.4.1 普通文件的權限
15.4.2 目錄權限
15.4.3 權限檢查算法
15.4.4 檢查對文件的訪問權限:access
15.4.5 Set-User-ID、Set-Group-ID和Sticky位
15.4.6 進程的文件模式創建掩碼:umask
15.4.7 更改文件權限:chmod和fchmod
15.5 I節點標誌(ext2擴展文件屬性)
15.6 總結
15.7 練習
第16章 擴展屬性
16.1 概述
16.2 擴展屬性的實現細節
16.3 操控擴展屬性的係統調用
16.4 總結
16.5 練習
第17章 訪問控製列錶
17.1 概述
17.2 ACL權限檢查算法
17.3 ACL的長、短文本格式
17.4 ACL_mask型ACE和ACL組分類
17.5 getfacl和setfacl命令
17.6 默認ACL與文件創建
17.7 ACL在實現方麵的限製
17.8 ACL API
17.9 總結
17.10 練習
第18章 目錄與鏈接
18.1 目錄和(硬)鏈接
18.2 符號(軟)鏈接
18.3 創建和移除(硬)鏈接:link和 unlink
18.4 更改文件名:rename
18.5 使用符號鏈接:symlink和readlink
18.6 創建和移除目錄:mkdir和rmdir
18.7 移除一個文件或目錄:remove
18.8 讀目錄:opendir和readdir
18.9 文件樹遍曆:nftw
18.10 進程的當前工作目錄
18.11 針對目錄文件描述符的相關操作
18.12 改變進程的根目錄:chroot
18.13 解析路徑名:realpath
18.14 解析路徑名字符串:dirname和basename
18.15 總結
18.16 練習
第19章 監控文件事件
19.1 概述
19.2 inotify API
19.3 inotify事件
19.4 讀取inotify事件
19.5 隊列限製和/proc文件
19.6 監控文件的舊有係統:dnotify
19.7 總結
19.8 練習
第20章 信號:基本概念
20.1 概念和概述
20.2 信號類型和默認行為
20.3 改變信號處置:signal
20.4 信號處理器簡介
20.5 發送信號:kill
20.6 檢查進程的存在
20.7 發送信號的其他方式:raise和killpg
20.8 顯示信號描述
20.9 信號集
20.10 信號掩碼(阻塞信號傳遞)
20.11 處於等待狀態的信號
20.12 不對信號進行排隊處理
20.13 改變信號處置:sigaction
20.14 等待信號:pause
20.15 總結
20.16 練習
第21章 信號:信號處理器函數
21.1 設計信號處理器函數
21.1.1 再論信號的非隊列化處理
21.1.2 可重入函數和異步信號安全函數
21.1.3 全局變量和sig_atomic_t數據類型
21.2 終止信號處理器函數的其他方法
21.2.1 在信號處理器函數中執行非本地跳轉
21.2.2 異常終止進程:abort
21.3 在備選棧中處理信號:sigaltstack
21.4 SA_SIGINFO標誌
21.5 係統調用的中斷和重啓
21.6 總結
21.7 練習
第22章 信號:高級特性
22.1 核心轉儲文件
22.2 傳遞、處置及處理的特殊情況
22.3 可中斷和不可中斷的進程睡眠狀態
22.4 硬件産生的信號
22.5 信號的同步生成和異步生成
22.6 信號傳遞的時機與順序
22.7 signal的實現及可移植性
22.8 實時信號
22.8.1 發送實時信號
22.8.2 處理實時信號
22.9 使用掩碼來等待信號:sigsuspend
22.10 以同步方式等待信號
22.11 通過文件描述符來獲取信號
22.12 利用信號進行進程間通信
22.13 早期的信號API(System V和BSD)
22.14 總結
22.15 練習
第23章 定時器與休眠
23.1 間隔定時器
23.2 定時器的調度及精度
23.3 為阻塞操作設置超時
23.4 暫停運行(休眠)一段固定時間
23.4.1 低分辨率休眠:sleep
23.4.2 高分辨率休眠:nanosleep
23.5 POSIX時鍾
23.5.1 獲取時鍾的值:clock_gettime
23.5.2 設置時鍾的值:clock_settime
23.5.3 獲取特定進程或綫程的時鍾ID
23.5.4 高分辨率休眠的改進版:clock_nanosleep
23.6 POSIX間隔式定時器
23.6.1 創建定時器:timer_create
23.6.2 配備和解除定時器:timer_settime
23.6.3 獲取定時器的當前值:timer_gettime
23.6.4 刪除定時器:timer_delete
23.6.5 通過信號發齣通知
23.6.6 定時器溢齣
23.6.7 通過綫程來通知
23.7 利用文件描述符進行通知的定時器:timerfd API
23.8 總結
23.9 練習
第24章 進程的創建
24.1 fork、exit、wait以及execve的簡介
24.2 創建新進程:fork
24.2.1 父、子進程間的文件共享
24.2.2 fork的內存語義
24.3 係統調用vfork
24.4 fork之後的競爭條件(Race Condition)
24.5 同步信號以規避競爭條件
24.6 總結
24.7 練習
第25章 進程的終止
25.1 進程的終止:_exit和exit
25.2 進程終止的細節
25.3 退齣處理程序
25.4 fork、stdio緩衝區以及_exit之間的交互
25.5 總結
25.6 練習
第26章 監控子進程
26.1 等待子進程
26.1.1 係統調用wait
26.1.2 係統調用waitpid
26.1.3 等待狀態值
26.1.4 從信號處理程序中終止進程
26.1.5 係統調用waitid
26.1.6 係統調用wait3和wait4
26.2 孤兒進程與僵屍進程
26.3 SIGCHLD信號
26.3.1 為SIGCHLD建立信號處理程序
26.3.2 嚮已停止的子進程發送SIGCHLD信號
26.3.3 忽略終止的子進程
26.4 總結
26.5 練習
第27章 程序的執行
27.1 執行新程序:execve
27.2 exec庫函數
27.2.1 環境變量PATH
27.2.2 將程序參數指定為列錶
27.2.3 將調用者的環境傳遞給新程序
27.2.4 執行由文件描述符指代的程序:fexecve
27.3 解釋器腳本
27.4 文件描述符與exec
27.5 信號與exec
27.6 執行shell命令:system
27.7 system的實現
27.8 總結
27.9 練習
第28章 詳述進程創建和程序執行
28.1 進程記賬
28.2 係統調用clone
28.2.1 clone的flags參數
28.2.2 因剋隆生成的子進程而對waitpid進行的擴展
28.3 進程的創建速度
28.4 exec和fork對進程屬性的影響
28.5 總結
28.6 練習
第29章 綫程:介紹
29.1 概述
29.2 Pthreads API的詳細背景
29.3 創建綫程
29.4 終止綫程
29.5 綫程ID(Thread ID)
29.6 連接(joining)已終止的綫程
29.7 綫程的分離
29.8 綫程屬性
29.9 綫程VS進程
29.10 總結
29.11 練習
第30章 綫程:綫程同步
30.1 保護對共享變量的訪問:互斥量
30.1.1 靜態分配的互斥量
30.1.2 加鎖和解鎖互斥量
30.1.3 互斥量的性能
30.1.4 互斥量的死鎖
30.1.5 動態初始化互斥量
30.1.6 互斥量的屬性
30.1.7 互斥量類型
30.2 通知狀態的改變:條件變量(Condition Variable)
30.2.1 由靜態分配的條件變量
30.2.2 通知和等待條件變量
30.2.3 測試條件變量的判斷條件(predicate)
30.2.4 示例程序:連接任意已終止綫程
30.2.5 經由動態分配的條件變量
30.3 總結
30.4 練習
第31章 綫程:綫程安全和每綫程存儲
31.1 綫程安全(再論可重入性)
31.2 一次性初始化
31.3 綫程特有數據
31.3.1 庫函數視角下的綫程特有數據
31.3.2 綫程特有數據API概述
31.3.3 綫程特有數據API詳述
31.3.4 使用綫程特有數據API
31.3.5 綫程特有數據的實現限製
31.4 綫程局部存儲
31.5 總結
31.6 練習
第32章 綫程:綫程取消
32.1 取消一個綫程
32.2 取消狀態及類型
32.3 取消點
32.4 綫程可取消性的檢測
32.5 清理函數(cleanup handler)
32.6 異步取消
32.7 總結
第33章 綫程:更多細節
33.1 綫程棧
33.2 綫程和信號
33.2.1 UNIX信號模型如何映射到綫程中
33.2.2 操作綫程信號掩碼
33.2.3 嚮綫程發送信號
33.2.4 妥善處理異步信號
33.3 綫程和進程控製
33.4 綫程實現模型
33.5 Linux POSIX綫程的實現
33.5.1 LinuxThreads
33.5.2 NPTL
33.5.3 哪一種綫程實現
33.6 Pthread API的高級特性
33.7 總結
33.8 練習
下冊
第34章 進程組、會話和作業控製
34.1 概述
34.2 進程組
34.3 會話
34.4 控製終端和控製進程
34.5 前颱和後颱進程組
34.6 SIGHUP信號
34.6.1 在shell中處理SIGHUP信號
34.6.2 SIGHUP和控製進程的終止
34.7 作業控製
34.7.1 在shell中使用作業控製
34.7.2 實現作業控製
34.7.3 處理作業控製信號
34.7.4 孤兒進程組(SIGHUP迴顧)
34.8 總結
34.9 習題
第35章 進程優先級和調度
35.1 進程優先級(nice值)
35.2 實時進程調度概述
35.2.1 SCHED_RR策略
35.2.2 SCHED_FIFO策略
35.2.3 SCHED_BATCH和SCHED_IDLE策略
35.3 實時進程調用API
35.3.1 實時優先級範圍
35.3.2 修改和獲取策略和優先級
35.3.3 釋放CPU
35.3.4 SCHED_RR時間片
35.4 CPU親和力
35.5 總結
35.6 習題
第36章 進程資源
36.1 進程資源使用
36.2 進程資源限製
36.3 特定資源限製細節
36.4 總結
36.5 習題
第37章 DAEMON
37.1 概述
37.2 創建一個daemon
37.3 編寫daemon指南
37.4 使用SIGHUP重新初始化一個daemon
37.5 使用syslog記錄消息和錯誤
37.5.1 概述
37.5.2 syslog API
37.5.3 /etc/syslog.conf文件
37.6 總結
37.7 習題
第38章 編寫安全的特權程序
38.1 是否需要一個Set-User-ID或Set-Group-ID程序?
38.2 以最小權限操作
38.3 小心執行程序
38.4 避免暴露敏感信息
38.5 確定進程的邊界
38.6 小心信號和競爭條件
38.7 執行文件操作和文件I/O的缺陷
38.8 不要完全相信輸入和環境
38.9 小心緩衝區溢齣
38.10 小心拒絕服務攻擊
38.11 檢查返迴狀態和安全地處理失敗情況
38.12 總結
38.13 習題
第39章 能力
39.1 能力基本原理
39.2 Linux能力
39.3 進程和文件能力
39.3.1 進程能力
39.3.2 文件能力
39.3.3 進程許可和有效能力集的目的
39.3.4 文件許可和有效能力集的目的
39.3.5 進程和文件可繼承集的目的
39.3.6 在shell中給文件賦予能力和查看文件能力
39.4 現代能力實現
39.5 在exec中轉變進程能力
39.5.1 能力邊界集
39.5.2 保持root語義
39.6 改變用戶ID對進程能力的影響
39.7 用編程的方式改變進程能力
39.8 創建僅包含能力的環境
39.9 發現程序所需的能力
39.10 不具備文件能力的老式內核和係統
39.11 總結
39.12 習題
第40章 登錄記賬
40.1 utmp和wtmp文件概述
40.2 utmpx API
40.3 utmpx結構
40.4 從utmp和wtmp文件中檢索信息
40.5 獲取登錄名稱:getlogin
40.6 為登錄會話更新utmp和wtmp文件
40.7 lastlog文件
40.8 總結
40.9 習題
第41章 共享庫基礎
41.1 目標庫
41.2 靜態庫
41.3 共享庫概述
41.4 創建和使用共享庫--首迴閤
41.4.1 創建一個共享庫
41.4.2 位置獨立的代碼
41.4.3 使用一個共享庫
41.4.4 共享庫soname
41.5 使用共享庫的有用工具
41.6 共享庫版本和命名規則
41.7 安裝共享庫
41.8 兼容與不兼容庫比較
41.9 升級共享庫
41.10 在目標文件中指定庫搜索目錄
41.11 在運行時找齣共享庫
41.12 運行時符號解析
41.13 使用靜態庫取代共享庫
41.14 總結
41.15 習題
第42章 共享庫高級特性
42.1 動態加載庫
42.1.1 打開共享庫:dlopen
42.1.2 錯誤診斷:dlerror
42.1.3 獲取符號的地址:dlsym
42.1.4 關閉共享庫:dlclose
42.1.5 獲取與加載的符號相關的信息:dladdr
42.1.6 在主程序中訪問符號
42.2 控製符號的可見性
42.3 鏈接器版本腳本
42.3.1 使用版本腳本控製符號的可見性
42.3.2 符號版本化
42.4 初始化和終止函數
42.5 預加載共享庫
42.6 監控動態鏈接器:LD_DEBUG
42.7 總結
42.8 習題
第43章 進程間通信簡介
43.1 IPC工具分類
43.2 通信工具
43.3 同步工具
43.4 IPC工具比較
43.5 總結
43.6 習題
第44章 管道和FIFO
44.1 概述
44.2 創建和使用管道
44.3 將管道作為一種進程同步的方法
44.4 使用管道連接過濾器
44.5 通過管道與Shell命令進行通信:popen
44.6 管道和stdio緩衝
44.7 FIFO
44.8 使用管道實現一個客戶端/服務器應用程序
44.9 非阻塞I/O
44.10 管道和FIFO中read和write的語義
44.11 總結
44.12 習題
第45章 System V IPC介紹
45.1 概述
45.2 IPC Key
45.3 關聯數據結構和對象權限
45.4 IPC標識符和客戶端/服務器應用程序
45.5 System V IPC get調用使用的算法
45.6 ipcs和ipcrm命令
45.7 獲取所有IPC對象列錶
45.8 IPC限製
45.9 總結
45.10 習題
第46章 System V消息隊列
46.1 創建或打開一個消息隊列
46.2 交換消息
46.2.1 發送消息
46.2.2 接收消息
46.3 消息隊列控製操作
46.4 消息隊列關聯數據結構
46.5 消息隊列的限製
46.6 顯示係統中所有消息隊列
46.7 使用消息隊列實現客戶端/服務器應用程序
46.8 使用消息隊列實現文件服務器應用程序
46.9 System V消息隊列的缺點
46.10 總結
46.11 習題
第47章 System V信號量
47.1 概述
47.2 創建或打開一個信號量集
47.3 信號量控製操作
47.4 信號量關聯數據結構
47.5 信號量初始化
47.6 信號量操作
47.7 多個阻塞信號量操作的處理
47.8 信號量撤銷值
47.9 實現一個二元信號量協議
47.10 信號量限製
47.11 System V信號量的缺點
47.12 總結
47.13 習題
第48章 System V共享內存
48.1 概述
48.2 創建或打開一個共享內存段
48.3 使用共享內存
48.4 示例:通過共享內存傳輸數據
48.5 共享內存在虛擬內存中的位置
48.6 在共享內存中存儲指針
48.7 共享內存控製操作
48.8 共享內存關聯數據結構
48.9 共享內存的限製
48.10 總結
48.11 習題
第49章 內存映射
49.1 概述
49.2 創建一個映射:mmap
49.3 解除映射區域:munmap
49.4 文件映射
49.4.1 私有文件映射
49.4.2 共享文件映射
49.4.3 邊界情況
49.4.4 內存保護和文件訪問模式交互
49.5 同步映射區域:msync
49.6 其他mmap標記
49.7 匿名映射
49.8 重新映射一個映射區域:mremap
49.9 MAP_NORESERVE和過度利用交換空間
49.10 MAP_FIXED標記
49.11 非綫性映射:remap_file_pages
49.12 總結
49.13 習題
第50章 虛擬內存操作
50.1 改變內存保護:mprotect
50.2 內存鎖:mlock和mlockatt
50.3 確定內存駐留性:mincore
50.4 建議後續的內存使用模式:madvise
50.5 小結
50.6 習題
第51章 POSIX IPC介紹
51.1 API概述
51.2 System V IPC與POSIX IPC比較
51.3 總結
第52章 POSIX消息隊列
52.1 概述
52.2 打開、關閉和斷開鏈接消息隊列
52.3 描述符和消息隊列之間的關係
52.4 消息隊列特性
52.5 交換消息
52.5.1 發送消息
52.5.2 接收消息
52.5.3 在發送和接收消息時設置超時時間
52.6 消息通知
52.6.1 通過信號接收通知
52.6.2 通過綫程接收通知
52.7 Linux特有的特性
52.8 消息隊列限製
52.9 POSIX和System V消息隊列比較
52.10 總結
52.11 習題
第53章 POSIX信號量
53.1 概述
53.2 命名信號量
53.2.1 打開一個命名信號量
53.2.2 關閉一個信號量
53.2.3 刪除一個命名信號量
53.3 信號量操作
53.3.1 等待一個信號量
53.3.2 發布一個信號量
53.3.3 獲取信號量的當前值
53.4 未命名信號量
53.4.1 初始化一個未命名信號量
53.4.2 銷毀一個未命名信號量
53.5 與其他同步技術比較
53.6 信號量的限製
53.7 總結
53.8 習題
第54章 POSIX共享內存
54.1 概述
54.2 創建共享內存對象
54.3 使用共享內存對象
54.4 刪除共享內存對象
54.5 共享內存APIs比較
54.6 總結
54.7 習題
第55章 文件加鎖
55.1 概述
55.2 使用flock給文件加鎖
55.2.1 鎖繼承與釋放的語義
55.2.2 flock的限製
55.3 使用fcntl給記錄加鎖
55.3.1 死鎖
55.3.2 示例:一個交互式加鎖程序
55.3.3 示例:一個加鎖函數庫
55.3.4 鎖的限製和性能
55.3.5 鎖繼承和釋放的語義
55.3.6 鎖定餓死和排隊加鎖請求的優先級
55.4 強製加鎖
55.5 /proc/locks文件
55.6 僅運行一個程序的單個實例
55.7 老式加鎖技術
55.8 總結
55.9 習題
第56章 SOCKET:介紹
56.1 概述
56.2 創建一個socket:socket
56.3 將socket綁定到地址:bind
56.4 通用socket地址結構:struct sockaddr
56.5 流socket
56.5.1 監聽接入連接:listen
56.5.2 接受連接:accept
56.5.3 連接到對等socket:connect
56.5.4 流socket I/O
56.5.5 連接終止:close
56.6 數據報socket
56.6.1 交換數據報:recvfrom和sendto
56.6.2 在數據報socket上使用connect
56.7 總結
第57章 SOCKET:UNIX DOMAIN
57.1 UNIX domain socket地址:struct sockaddr_un
57.2 UNIX domain中的流socket
57.3 UNIX domain中的數據報socket
57.4 UNIX domain socket權限
57.5 創建互聯socket對:socketpair
57.6 Linux抽象socket名空間
57.7 總結
57.8 習題
第58章 SOCKET:TCP/IP網絡基礎
58.1 因特網
58.2 聯網協議和層
58.3 數據鏈路層
58.4 網絡層:IP
58.5 IP地址
58.6 傳輸層
58.6.1 端口號
58.6.2 用戶數據報協議(UDP)
58.6.3 傳輸控製協議(TCP)
58.7 請求注解(RFC)
58.8 總結
第59章 SOCKET:Internet DOMAIN
59.1 Internet domain socket
59.2 網絡字節序
59.3 數據錶示
59.4 Internet socket地址
59.5 主機和服務轉換函數概述
59.6 inet_pton和inet_ntop函數
59.7 客戶端-服務器示例(數據報socket)
59.8 域名係統(DNS)
59.9 /etc/services文件
59.10 獨立於協議的主機和服務轉換
59.10.1 getaddrinfo函數
59.10.2 釋放addrinfo列錶:freeaddrinfo
59.10.3 錯誤診斷:gai_strerror
59.10.4 getnameinfo函數
59.11 客戶端-服務器示例(流式socket)
59.12 Internet domain socket庫
59.13 過時的主機和服務轉換API
59.13.1 inet_aton和inet_ntoa函數
59.13.2 gethostbyname和gethostbyaddr函數
59.13.3 getserverbyname和getserverbyport函數
59.14 UNIX與Internet domain socket比較
59.15 更多信息
59.16 總結
59.17 習題
第60章 SOCKET:服務器設計
60.1 迭代型和並發型服務器
60.2 迭代型UDP echo服務器
60.3 並發型TCP echo服務器
60.4 並發型服務器的其他設計方案
60.5 inetd(Internet超級服務器)守護進程
60.6 總結
60.7 練習
第61章 SOCKET:高級主題
61.1 流式套接字上的部分讀和部分寫
61.2 shutdown係統調用
61.3 專用於套接字的I/O係統調用:recv和send
61.4 sendfile係統調用
61.5 獲取套接字地址
61.6 深入探討TCP協議
61.6.1 TCP報文的格式
61.6.2 TCP序列號和確認機製
61.6.3 TCP協議狀態機以及狀態遷移圖
61.6.4 TCP連接的建立
61.6.5 TCP連接的終止
61.6.6 在TCP套接字上調用shutdown
61.6.7 TIME_WAIT狀態
61.7 監視套接字:netstat
61.8 使用tcpdump來監視TCP流量
61.9 套接字選項
61.10 SO_REUSEADDR套接字選項
61.11 在accept中繼承標記和選項
61.12 TCP vs UDP
61.13 高級功能
61.13.1 帶外數據
61.13.2 sendmsg和recvmsg係統調用
61.13.3 傳遞文件描述符
61.13.4 接收發送端的憑據
61.13.5 順序數據包套接字
61.13.6 SCTP以及DCCP傳輸層協議
61.14 總結
61.15 練習
第62章 終端
62.1 整體概覽
62.2 獲取和修改終端屬性
62.3 stty命令
62.4 終端特殊字符
62.5 終端標誌
62.6 終端的I/O模式
62.6.1 規範模式
62.6.2 非規範模式
62.6.3 加工模式、cbreak模式以及原始模式
62.7 終端綫速(比特率)
62.8 終端的行控製
62.9 終端窗口大小
62.10 終端標識
62.11 總結
62.12 練習
第63章 其他備選的I/O模型
63.1 整體概覽
63.1.1 水平觸發和邊緣觸發
63.1.2 在備選的I/O模型中采用非阻塞I/O
63.2 I/O多路復用
63.2.1 select係統調用
63.2.2 poll係統調用
63.2.3 文件描述符何時就緒?
63.2.4 比較select和poll
63.2.5 select和poll存在的問題
63.3 信號驅動I/O
63.3.1 何時發送"I/O就緒"信號
63.3.2 優化信號驅動I/O的使用
63.4 epoll編程接口
63.4.1 創建epoll實例:epoll_create
63.4.2 修改epoll的興趣列錶:epoll_ctl
63.4.3 事件等待:epoll_wait
63.4.4 深入探究epoll的語義
63.4.5 epoll同I/O多路復用的性能對比
63.4.6 邊緣觸發通知
63.5 在信號和文件描述符上等待
63.5.1 pselect係統調用
63.5.2 self-pipe技巧
63.6 總結
63.7 練習
第64章 僞終端
64.1 整體概覽
64.2 UNIX98僞終端
64.2.1 打開未使用的主設備:posix_openpt
64.2.2 修改從設備屬主和權限:grantpt
64.2.3 解鎖從設備:unlockpt
64.2.4 獲取從設備名稱:ptsname
64.3 打開主設備:ptyMasterOpen
64.4 將進程連接到僞終端:ptyFork
64.5 僞終端I/O
64.6 實現script(1)程序
64.7 終端屬性和窗口大小
64.8 BSD風格的僞終端
64.9 總結
64.10 練習
附錄A 跟蹤係統調用
附錄B 解析命令行選項
附錄C 對NULL指針做轉型
附錄D 內核配置
附錄E 更多信息源
附錄F 部分習題解答
初拿到這套厚重的《Linux UNIX係統編程手冊》時,心中是既興奮又忐忑。興奮的是,這無疑是係統編程領域的“聖經”,對渴望深入理解 Linux 內核和係統調用細節的我來說,是夢寐以求的寶藏。然而,其龐大的篇幅和深邃的內容也確實讓人望而生畏。我曾聽說過的無數關於 Linux 係統底層運作的謎團,似乎都隱藏在這兩冊厚書之中。翻開第一頁,熟悉的 ASCII 碼風格的排版,配閤著嚴謹而清晰的文字,瞬間便把我帶入瞭一個全新的世界。我迫不及待地想通過它來解開那些一直睏擾我的問題,比如一個進程是如何創建的,信號是如何在不同進程間傳遞的,文件 I/O 的底層機製究竟是怎樣的,以及各種同步原語背後的原理。我期待著在這本書的引導下,我的編程思緒能夠更加清晰,對 Linux 的掌握能夠達到一個全新的層次,不再僅僅停留在應用層麵,而是能夠真正觸及到係統的靈魂。這套書不僅僅是知識的集閤,更是通往更高階技術殿堂的鑰匙,我深信通過仔細研讀,我能夠培養齣更加健壯、高效、安全的係統級軟件開發能力。
评分我一直對操作係統如何管理資源、如何提供服務感到著迷。在學習計算機科學的過程中,UNIX 和 Linux 的設計理念給我留下瞭深刻的印象。這套《Linux UNIX係統編程手冊》就像是一扇窗戶,讓我能夠窺探到操作係統的內部運作。我非常期待能夠通過它來理解進程、綫程、文件、網絡、信號等核心概念在 Linux 係統中的具體實現。我希望能夠掌握如何利用係統調用來編寫高效、健壯的係統級程序,以及如何調試和優化這些程序。特彆是我對內存映射(mmap)以及其在文件 I/O 和共享內存中的應用一直很感興趣,這本書應該會提供非常詳盡的解釋。另外,我也想瞭解 POSIX 標準在 Linux 中的具體體現,以及它如何為跨平颱係統編程提供基礎。這本書的深度和廣度,無疑將極大地提升我對 Linux 係統編程的理解和實踐能力。
评分對於我這樣一個長期專注於 C++ 或 Python 應用層開發的開發者來說,對 Linux 係統底層的瞭解一直是個短闆。這次購買《Linux UNIX係統編程手冊》,主要就是想彌補這方麵的不足。我希望這本書能夠幫助我理解那些我們每天都在使用的係統工具和庫的底層原理。比如,`grep` 命令是如何高效地搜索文件內容的?`ssh` 連接是如何建立的?`malloc` 函數在底層是如何分配內存的?這些問題長期以來一直縈繞在我腦海中。通過閱讀這本書,我期望能夠獲得對 Linux 係統調用接口的全麵認識,並且理解這些接口是如何與內核交互的。我知道這本書非常厚重,但正是這種厚重讓我看到瞭其內容的豐富和深入。我打算花大量時間來消化吸收,一步一個腳印地去理解其中的每一個概念和每一個例子。我相信,這本書將是我未來在 Linux 係統開發領域不斷探索的重要基石。
评分在我看來,許多程序員在日常開發中,往往滿足於使用高級語言和框架來屏蔽底層的復雜性。然而,當遇到性能瓶頸、並發問題或者安全漏洞時,缺乏對係統底層的理解便顯得捉襟見肘。我購買這套《Linux UNIX係統編程手冊》的初衷,正是希望能夠深入到 Linux 的係統調用層麵,掌握那些能夠讓你真正掌控係統的“魔法”。我期待能夠通過這本書,理解係統調用的生命周期,掌握各種同步與互斥機製的精髓,以及深入探究網絡通信的底層協議棧。這本書的齣版,對於任何想要在 Linux 平颱上進行深入開發,或者希望成為一名優秀的係統工程師的開發者來說,都具有不可估量的價值。我希望通過這本書的學習,能夠讓我擺脫對現有工具的依賴,能夠獨立地設計和實現更復雜、更底層的係統級組件,並且擁有解決那些棘手問題的能力。
评分在我過去幾年的開發生涯中,雖然大量接觸 Linux 環境,但很多時候都像是在“黑箱”中進行操作。對於一些看似理所當然的係統行為,以及在遇到疑難雜癥時,常常感到力不從心。我一直希望能找到一本能夠係統性地梳理 Linux 係統調用和相關 API 的書籍,而《Linux UNIX係統編程手冊》正是這樣一本能夠填補我知識空白的著作。它不僅僅是 API 的羅列,更重要的是對這些 API 的背後機製、設計哲學以及使用注意事項進行瞭深入的剖析。我非常期待通過閱讀這本書,能夠建立起一套完整的 Linux 係統編程知識體係,理解不同係統調用的權衡和取捨,從而在實際開發中做齣更明智的技術決策。例如,對於進程間通信(IPC)的各種方式,我一直想深入瞭解它們的性能差異和適用場景,這本書應該能提供非常詳盡的解答。同時,我對文件係統、內存管理以及綫程模型等核心概念的理解也希望能夠通過本書得到質的飛躍。
评分京东买的不错cffffffffffdsyjbvfdrtffsjjfdcghuhg#rwwdyjbvjkiufdxsrfyu
评分大神的世界我不用,不过满200-100还是挺便宜的,希望有用……
评分活动时买的,挺实惠。内容与APUE有些重复了,书的质量不是很好
评分经典之作,入门必读
评分这么厚的两本书算下来33
评分还没开始看呢,看了再追评吧!
评分包装差。。但是书的内容必须好评。。看个人喜好,我觉得这书挺适合我的,没毛病
评分上下册书已收,比较满意
评分20多年来,严谨的C程序员都是依靠一本书来深入了解驱动UNIX和Linux内核的编程接口的实用知识的,这本书就是W. Richard Stevens所著的《UNIX高级环境编程》。现在,Stevens的同事Steve Rago彻底更新了这本经典著作。新的第3版支持当今领先的系统平台,反映了技术进展和实践,并且符合新的Single UNIX Specification第4版(SUSv4)。
本站所有內容均為互聯網搜索引擎提供的公開搜索信息,本站不存儲任何數據與內容,任何內容與數據均與本站無關,如有需要請聯繫相關搜索引擎包括但不限於百度,google,bing,sogou 等
© 2025 tushu.tinynews.org All Rights Reserved. 求知書站 版权所有