基本信息
名称: Linux/UNIX系统编程手册
作者信息: 作者: 凯利斯克 (Michael Kerrisk) [ 中文 pdf ]
简单介绍
Linux/UNIX系统编程接口权威巨著,无出其右;涵盖500多个系统调用和库函数;示例清晰完整,解释巨细靡遗;涵盖当前UNIX标准(POSI X.1-2001/SUS v3和POSI X.1-2008/SUS v4);众多业内专家人士联袂推荐;Linux/UNIX开发人员的案头必备,注定成为新的经典;
目录
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307
| 《Linux/UNIX系统编程手册(上册)》目录: 第1章 历史和标准 1 1.1 UNIX和C语言简史 1 1.2 Linux简史 4 1.2.1 GNU项目 4 1.2.2 Linux内核 5 1.3 标准化 8 1.3.1 C编程语言 8 1.3.2 首个POSIX标准 9 1.3.3 X/Open公司和TheOpenGroup 10 1.3.4 SUSv3和POSIX.1—2001 10 1.3.5 SUSv4和POSIX.1—2008 12 1.3.6 UNIX标准时间表 12 1.3.7 实现标准 14 1.3.8 Linux、标准、Linux标准规范(LinuxStandardBase) 14 1.4 总结 15 第2章 基本概念 17 2.1 操作系统的核心—内核 17 2.2 shell 19 2.3 用户和组 20 2.4 单根目录层级、目录、链接及文件 21 2.5 文件I/O模型 23 2.6 程序 24 2.7 进程 25 2.8 内存映射 27 2.9 静态库和共享库 28 2.10 进程间通信及同步 28 2.11 信号 29 2.12 线程 30 2.13 进程组和shell任务控制 30 2.14 会话、控制终端和控制进程 30 2.15 伪终端 31 2.16 日期和时间 31 2.17 客户端服务器架构 32 2.18 实时性 32 2.19 proc文件系统 33 2.20 总结 33 第3章 系统编程概念 34 3.1 系统调用 34 3.2 库函数 36 3.3 标准C语言函数库;GNUC语言函数库(glibc) 37 3.4 处理来自系统调用和库函数的错误 38 3.5 关于本书示例程序的注意事项 40 3.5.1 命令行选项及参数 40 3.5.2 常用的函数及头文件 40 3.6 可移植性问题 49 3.6.1 特性测试宏 49 3.6.2 系统数据类型 51 3.6.3 其他的可移植性问题 53 3.7 总结 54 3.8 练习 55 第4章 文件I/O:通用的I/O模型 56 4.1 概述 56 4.2 通用I/O 58 4.3 打开一个文件:open() 58 4.3.1 open()调用中的flags参数 60 4.3.2 open()函数的错误 63 4.3.3 creat()系统调用 64 4.4 读取文件内容:read() 64 4.5 数据写入文件:write() 65 4.6 关闭文件:close() 66 4.7 改变文件偏移量:lseek() 66 4.8 通用I/O模型以外的操作:ioctl() 70 4.9 总结 71 4.10 练习 71 第5章 深入探究文件I/O 72 5.1 原子操作和竞争条件 72 5.2 文件控制操作:fcntl() 75 5.3 打开文件的状态标志 75 5.4 文件描述符和打开文件之间的关系 76 5.5 复制文件描述符 78 5.6 在文件特定偏移量处的I/O:pread()和pwrite() 80 5.7 分散输入和集中输出(Scatter—GatherI/O):readv()和writev() 81 5.8 截断文件:truncate()和ftruncate()系统调用 84 5.9 非阻塞I/O 84 5.10 大文件I/O 85 5.11 /dev/fd目录 88 5.12 创建临时文件 88 5.13 总结 90 5.14 练习 90 第6章 进程 92 6.1 进程和程序 92 6.2 进程号和父进程号 93 6.3 进程内存布局 94 6.4 虚拟内存管理 97 6.5 栈和栈帧 99 6.6 命令行参数(argc,argv) 99 6.7 环境列表 101 6.8 执行非局部跳转:setjmp()和longjmp() 106 6.9 总结 111 6.9 练习 112 第7章 内存分配 113 7.1 在堆上分配内存 113 7.1.1 调整programbreak:brk()和sbrk() 113 7.1.2 在堆上分配内存:malloc()和free() 114 7.1.3 malloc()和free()的实现 117 7.1.4 在堆上分配内存的其他方法 120 7.2 在堆栈上分配内存:alloca() 122 7.3 总结 123 7.4 练习 123 第8章 用户和组 124 8.1 密码文件:/etc/passwd 124 8.2 shadow密码文件:/etc/shadow 125 8.3 组文件:/etc/group 126 8.4 获取用户和组的信息 127 8.5 密码加密和用户认证 132 8.6 总结 135 8.7 练习 135 第9章 进程凭证 136 9.1 实际用户ID和实际组ID 136 9.2 有效用户ID和有效组ID 136 9.3 Set—User—ID和Set—Group—ID程序 137 9.4 保存set—user—ID和保存set—group—ID 138 9.5 文件系统用户ID和组ID 139 9.6 辅助组ID 140 9.7 获取和修改进程凭证 140 9.7.1 获取和修改实际、有效和保存设置标识 140 9.7.2 获取和修改文件系统ID 145 9.7.3 获取和修改辅助组ID 145 9.7.4 修改进程凭证的系统调用总结 146 9.7.5 示例:显示进程凭证 148 9.8 总结 149 9.9 习题 150 第10章 时间 151 10.1 日历时间(CalendarTime) 151 10.2 时间转换函数 153 10.2.1 将time_t转换为可打印格式 153 10.2.2 time_t和分解时间之间的转换 154 10.2.3 分解时间和打印格式之间的转换 155 10.3 时区 161 10.4 地区(Locale) 163 10.5 更新系统时钟 167 10.6 软件时钟(jiffies) 168 10.7 进程时间 168 10.8 总结 171 10.9 练习 172 第11章 系统限制和选项 173 11.1 系统限制 174 11.2 在运行时获取系统限制(和选项) 176 11.3 运行时获取与文件相关的限制(和选项) 178 11.4 不确定的限制 179 11.5 系统选项 180 11.6 总结 181 11.7 练习 182 第12章 系统和进程信息 183 12.1 /proc文件系统 183 12.1.1 获取与进程有关的信息:/proc/PID 183 12.1.2 /proc目录下的系统信息 185 12.1.3 访问/proc文件 186 12.2 系统标识:uname() 188 12.3 总结 190 12.4 练习 190 第13章 文件I/O缓冲 191 13.1 文件I/O的内核缓冲:缓冲区高速缓存 191 13.2 stdio库的缓冲 194 13.3 控制文件I/O的内核缓冲 196 13.4 I/O缓冲小结 200 13.5 就I/O模式向内核提出建议 201 13.6 绕过缓冲区高速缓存:直接I/O 202 13.7 混合使用库函数和系统调用进行文件I/O 204 13.8 总结 205 13.9 练习 205 第14章 系统编程概念 207 14.1 设备专用文件(设备文件) 207 14.2 磁盘和分区 208 14.3 文件系统 209 14.4 i节点 211 14.5 虚拟文件系统(VFS) 213 14.6 日志文件系统 214 14.7 单根目录层级和挂载点 215 14.8 文件系统的挂载和卸载 216 14.8.1 挂载文件系统:mount() 217 14.8.2 卸载文件系统:umount()和umount2() 222 14.9 高级挂载特性 223 14.9.1 在多个挂载点挂载文件系统 224 14.9.2 多次挂载同一挂载点 224 14.9.3 基于每次挂载的挂载标志 225 14.9.4 绑定挂载 225 14.9.5 递归绑定挂载 226 14.10 虚拟内存文件系统:tmpfs 227 14.11 获得与文件系统有关的信息:statvfs() 228 14.12 总结 229 14.13 练习 230 第15章 文件属性 231 15.1 获取文件信息:stat() 231 15.2 文件时间戳 236 15.2.1 使用utime()和utimes()来改变文件时间戳 238 15.2.2 使用utimensat()和futimens()改变文件时间戳 239 15.3 文件属主 241 15.3.1 新建文件的属主 241 15.3.2 改变文件属主:chown()、fchown()和lchown() 241 15.4 文件权限 244 15.4.1 普通文件的权限 244 15.4.2 目录权限 246 15.4.3 权限检查算法 246 15.4.4 检查对文件的访问权限:access() 248 15.4.5 Set—User—ID、Set—Group—ID和Sticky位 249 15.4.6 进程的文件模式创建掩码:umask() 249 15.4.7 更改文件权限:chmod()和fchmod() 251 15.5 I节点标志(ext2扩展文件属性) 252 15.6 总结 256 15.7 练习 256 第16章 扩展属性 258 16.1 概述 258 16.2 扩展属性的实现细节 260 16.3 操控扩展属性的系统调用 260 16.4 总结 264 16.5 练习 264 第17章 访问控制列表 265 17.1 概述 265 17.2 ACL权限检查算法 267 17.3 ACL的长、短文本格式 268 17.4 ACL_mask型ACE和ACL组分类 269 17.5 getfacl和setfacl命令 270 17.6 默认ACL与文件创建 271 17.7 ACL在实现方面的限制 272 17.8 ACLAPI 273 17.9 总结 280 17.10 练习 280 第18章 目录与链接 281 18.1 目录和(硬)链接 281 18.2 符号(软)链接 283 18.3 创建和移除(硬)链接:link()和unlink() 286 18.4 更改文件名:rename() 289 18.5 使用符号链接:symlink()和readlink() 290 18.6 创建和移除目录:mkdir()和rmdir() 291 18.7 移除一个文件或目录:remove() 292 18.8 读目录:opendir()和readdir() 292 18.9 文件树遍历:nftw() 297 18.10 进程的当前工作目录 301 18.11 针对目录文件描述符的相关操作 303 18.12 改变进程的根目录:chroot() 304 18.13 解析路径名:realpath() 306 18.14 解析路径名字符串:dirname()和basename() 307 18.15 总结 309 18.16 练习 309 第19章 监控文件事件 311 19.1 概述 311 19.2 inotifyAPI 312 19.3 inotify事件 313 19.4 读取inotify事件 315 19.5 队列限制和/proc文件 319 19.6 监控文件的旧有系统:dnotify 320 19.7 总结 320 19.8 练习 320 第20章 信号:基本概念 321 20.1 概念和概述 321 20.2 信号类型和默认行为 323 20.3 改变信号处置:signal() 329 20.4 信号处理器简介 330 20.5 发送信号:kill() 333 20.6 检查进程的存在 334 20.7 发送信号的其他方式:raise()和killpg() 335 20.8 显示信号描述 336 20.9 信号集 337 20.10 信号掩码(阻塞信号传递) 339 20.11 处于等待状态的信号 341 20.12 不对信号进行排队处理 341 20.13 改变信号处置:sigaction() 345 20.14 等待信号:pause() 346 20.15 总结 347 20.16 练习 347 第21章 信号:信号处理器函数 348 21.1 设计信号处理器函数 348 21.1.1 再论信号的非队列化处理 348 21.1.2 可重入函数和异步信号安全函数 349 21.1.3 全局变量和sig_atomic_t数据类型 353 21.2 终止信号处理器函数的其他方法 354 21.2.1 在信号处理器函数中执行非本地跳转 354 21.2.2 异常终止进程:abort() 358 21.3 在备选栈中处理信号:sigaltstack() 358 21.4 SA_SIGINFO标志 361 21.5 系统调用的中断和重启 366 21.6 总结 368 21.7 练习 369 第22章 信号:高级特性 370 22.1 核心转储文件 370 22.2 传递、处置及处理的特殊情况 372 22.3 可中断和不可中断的进程睡眠状态 373 22.4 硬件产生的信号 374 22.5 信号的同步生成和异步生成 374 22.6 信号传递的时机与顺序 375 22.7 signal()的实现及可移植性 376 22.8 实时信号 378 22.8.1 发送实时信号 379 22.8.2 处理实时信号 380 22.9 使用掩码来等待信号:sigsuspend() 384 22.10 以同步方式等待信号 387 22.11 通过文件描述符来获取信号 390 22.12 利用信号进行进程间通信 393 22.13 早期的信号API(SystemV和BSD) 393 22.14 总结 395 22.15 练习 396 …… 第23章 定时器与休眠 397 第24章 进程的创建 425 第25章 进程的终止 440 第26章 监控子进程 447 第27章 程序的执行 465 第28章 详述进程创建和程序执行 487 第29章 线程:介绍 509 第30章 线程:线程同步 521 第31章 线程:线程安全和每线程存储 539 第32章 线程:线程取消 552 第33章 线程:更多细节 561 …… 《Linux/UNIX系统编程手册(下册)》
|
亚马逊链接