内容简介
系统编程是指编写系统软件,其代码在底层运行,直接跟内核和核心系统库对话。
《Linux系统编程(第2版)》是一本关于Linux系统编程的教程,也是一本介绍Linux系统编程的手册,还是一本如何实现更优雅更快代码的内幕指南。全书分为11章和2个附录,详细介绍了Linux系统编程基本概念、文件I/O、缓冲I/O、文件I/O、进程管理、进程管理、线程、文件和目录管理、信号和时间等主题。附录给出了gcc和GNU C提供的很多语言扩展,以及阅读的相关书目。
《Linux系统编程(第2版)》的作者是知名的Linux内核专家,多本技术图书的作者。《Linux系统编程(第2版)》需要在C编程和Linux编程环境下工作的程序员阅读,对于想要巩固基础或了解内核的编程人员,《Linux系统编程(第2版)》也很有参考价值。
目录
第1章 入门和基本概念 1
1.1 系统编程 1
1.1.1 为什么要学习系统编程 2
1.1.2 系统编程的基础 2
1.1.3 系统调用 3
1.1.4 C库 3
1.1.5 C编译器 4
1.2 API和ABI 4
1.2.1 API 5
1.2.2 ABI 5
1.3 标准 6
1.3.1 POSIX和SUS的历史 6
1.3.2 C语言标准 7
1.3.3 Linux和标准 8
1.3.4 本书和标准 8
1.4 Linux编程的概念 9
1.4.1 文件和文件系统 9
1.4.2 进程 15
1.4.3 用户和组 16
1.4.4 权限 17
1.4.5 信号 18
1.4.6 进程间通信 19
1.4.7 头文件 19
1.4.8 错误处理 19
第2章 文件I/O 23
2.1 打开文件 24
2.1.1 系统调用open() 24
2.1.2 新建文件的所有者 27
2.1.3 新建文件的权限 27
2.1.4 creat()函数 30
2.1.5 返回值和错误码 30
2.2 通过read()读文件 31
2.2.1 返回值 31
2.2.2 读入所有字节 33
2.2.3 非阻塞读 33
2.2.4 其他错误码 34
2.2.5 read()调用的大小限制 34
2.3 调用write()写 35
2.3.1 部分写(Partial Write) 36
2.3.2 Append(追加)模式 36
2.3.3 非阻塞写 37
2.3.4 其他错误码 37
2.3.5 write()大小限制 38
2.3.6 write()行为 38
2.4 同步I/O 39
2.4.1 fsync()和fdatasync() 39
2.4.2 sync() 41
2.4.3 O_SYNC标志位 42
2.4.4 O_DSYNC和O_RSYNC 42
2.5 直接I/O 43
2.6 关闭文件 43
2.7 用lseek()查找 44
2.7.1 在文件末尾后查找 46
2.7.2 错误码 46
2.7.3 限制 47
2.8 定位读写 47
2.9 文件截短 48
2.10 I/O多路复用 49
2.10.1 select() 50
2.10.2 poll() 56
2.10.3 poll()和select()的区别 60
2.11 内核内幕 61
2.11.1 虚拟文件系统 61
2.11.2 页缓存 62
2.11.3 页回写 63
2.12 结束语 64
第3章 缓冲I/O 65
3.1 用户缓冲I/O 65
3.2 标准I/O 68
3.3 打开文件 69
3.4 通过文件描述符打开流 70
3.5 关闭流 71
3.6 从流中读数据 71
3.6.1 每次读取一个字节 71
3.6.2 每次读一行 72
3.6.3 读二进制文件 74
3.7 向流中写数据 75
3.7.1 写入单个字符 75
3.7.2 写入字符串 76
3.7.3 写入二进制数据 76
3.8 缓冲I/O示例程序 77
3.9 定位流 78
3.10 Flush(刷新输出)流 80
3.11 错误和文件结束 80
3.12 获取关联的文件描述符 81
3.13 控制缓冲 82
3.14 线程安全 83
3.14.1 手动文件加锁 84
3.14.2 对流操作解锁 85
3.15 对标准I/O的批评 86
3.16 结束语 87
第4章 文件I/O 88
4.1 分散/聚集I/O 89
4.2 Event Poll 94
4.2.1 创建新的epoll实例 94
4.2.2 控制epoll 95
4.2.3 等待epoll事件 98
4.2.4 边缘触发事件和条件触发事件 100
4.3 存储映射 101
4.3.1 mmap() 101
4.3.2 munmap() 105
4.3.3 存储映射实例 106
4.3.4 mmap()的优点 107
4.3.5 mmap()的不足 108
4.3.6 调整映射的大小 108
4.3.7 改变映射区域的权限 109
4.3.8 通过映射同步文件 110
4