Linux/UNIX系统编程插口权威性经典著作,无出其右;
包含500好几个系统调用和库函数;示例清楚详细,表述巨细靡遗;
包含当今UNIX规范(POSI X.1-2001/SUS v3和POSI X.1-2008/SUS v4);
诸多业内人士人员联手强烈推荐;
Linux/UNIX开发者的案头必需,终究变成新的經典;
《Linux/UNIX系统编程手册(上、下册)》是详细介绍Linux与UNIX编程插口的权威性经典著作。Linux编程杰出权威专家Michael Kerrisk在书中详细说明了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()