- 商品参数
-
- 作者:
拉姆著
- 出版社:人民邮电出版社
- 出版时间:2014-05
- ISBN:9786490571288
- 版权提供:人民邮电出版社
店铺公告
本店存在书、古旧书、收藏书、二手书等特殊商品,因受采购成本限制,可能高于定价销售,明码标价,介意者勿拍!
1.书籍因稀缺可能导致售价高于定价,图书实际定价参见下方详情内基本信息,请买家看清楚且明确后再拍,避免价格争议!
2.店铺无纸质均开具电子,请联系客服开具电子版
内容介绍
系统编程是指编写系统软件,其代码在底层运行,直接跟内核和核心系统库对话。 《Linux系统编程(第 2版)》是*本关于Linux系统编程的教程,也是*本介绍Linux系统编程的手册,还是*本如何实现更*雅更快代码的内幕指南。*书分为**章和2个附录,详细介绍了Linux系统编程基本概念、文件I/O、缓冲I/O、* 级文件I/O、进程管理、* 级进程管理、线程、文件和目录管理、信号和时间等主题。附录给出了gcc和GNU C提供的很多语言扩展,以及推荐阅读的相关书目。 《Linux系统编程(第 2版)》的作者是Linux内核*业人士,多本技术图书的作者。《Linux系统编程(第 2版)》需要在C编程和Linux编程环境下工作的程序员阅读,对于想要巩固基础或了解内核的* 级编程人员,《Linux系统编程(第 2版)》也很有参考*值。
目录
目 录
第 *章 入门和基本概念 *
*.* 系统编程 *
*.*.* 为什么要学习系统编程 2
*.*.2 系统编程的基础 2
*.*.3 系统调用 3
*.*.4 C库 3
*.*.5 C编译器 4
*.2 API和ABI 4
*.2.* API 5
*.2.2 ABI 5
*.3 标准 6
*.3.* POSIX和SUS的历史 6
*.3.2 C语言标准 7
*.3.3 Linux和标准 8
*.3.4 本书和标准 8
*.4 Linux编程的概念 9
*.4.* 文件和文件系统 9
*.4.2 进程 *5
*.4.3 用户和组 *6
*.4.4 权限 *7
*.4.5 信号 *8
*.4.6 进程间通信 *9
*.4.7 头文件 *9
*.4.8 错误处理 *9
第 2章 文件I/O 23
2.* 打开文件 24
2.*.* 系统调用open() 24
2.*.2 新建文件的所有者 27
2.*.3 新建文件的权限 27
2.*.4 creat()函数 30
2.*.5 返回值和错误码 30
2.2 通过read()读文件 3*
2.2.* 返回值 3*
2.2.2 读入所有字节 33
2.2.3 非阻塞读 33
2.2.4 其他错误码 34
2.2.5 read()调用的大小限制 34
2.3 调用write()写 35
2.3.* *分写(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.* fsync()和fdatasync() 39
2.4.2 sync() 4*
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.* 在文件末尾后查找 46
2.7.2 错误码 46
2.7.3 限制 47
2.8 定位读写 47
2.9 文件截短 48
2.*0 I/O多路复用 49
2.*0.* select() 50
2.*0.2 poll() 56
2.*0.3 poll()和select()的区别 60
2.** 内核内幕 6*
2.**.* 虚拟文件系统 6*
2.**.2 页缓存 62
2.**.3 页回写 63
2.*2 结束语 64
第3章 缓冲I/O 65
3.* 用户缓冲I/O 65
3.2 标准I/O 68
3.3 打开文件 69
3.4 通过文件描述符打开流 70
3.5 关闭流 7*
3.6 从流中读数据 7*
3.6.* 每次读取*个字节 7*
3.6.2 每次读*行 72
3.6.3 读二进制文件 74
3.7 向流中写数据 75
3.7.* 写入单个字符 75
3.7.2 写入字符串 76
3.7.3 写入二进制数据 76
3.8 缓冲I/O示例程序 77
3.9 定位流 78
3.*0 Flush(刷新输出)流 80
3.** 错误和文件结束 80
3.*2 获取关联的文件描述符 8*
3.*3 控制缓冲 82
3.*4 线程* 83
3.*4.* 手动文件加锁 84
3.*4.2 对流操作解锁 85
3.*5 对标准I/O的批评 86
3.*6 结束语 87
第4章 * 级文件I/O 88
4.* 分散/聚集I/O 89
4.2 Event Poll 94
4.2.* *建新的epoll实例 94
4.2.2 控制epoll 95
4.2.3 等待epoll事件 98
4.2.4 边缘触发事件和条件触发事件 *00
4.3 存储映射 *0*
4.3.* mmap() *0*
4.3.2 munmap() *05
4.3.3 存储映射实例 *06
4.3.4 mmap()的*点 *07
4.3.5 mmap()的*足 *08
4.3.6 调整映射的大小 *08
4.3.7 改变映射区域的权限 *09
4.3.8 通过映射同步文件 **0
4.3.9 给出映射提示 **2
4.4 普通文件I/O提示 **4
4.4.* 系统调用posix_fadvise() **4
4.4.2 readahead()系统调用 **5
4.4.3 “经济实用”的操作提示 **6
4.5 同步(Synchronized),同步(Synchronous)及异步(Asynchronous)操作 **7
4.6 I/O调度器和I/O性能 **8
4.6.* 磁盘寻址 **9
4.6.2 I/O调度器的功能 *20
4.6.3 改进读请求 *20
4.6.4 选择和配置你的I/O调度器 *23
4.6.5 *化I/O性能 *24
4.7 结束语 *30
第5章 进程管理 *3*
5.* 程序、进程和线程 *3*
5.2 进程ID *32
5.2.* 分配进程ID *32
5.2.2 进程体系 *33
5.2.3 pid_t *33
5.2.4 获取进程ID和父进程ID *33
5.3 运行新进程 *34
5.3.* exec系统调用 *34
5.3.2 fork()系统调用 *38
5.4 *止进程 *4*
5.4.* *止进程的其他方式 *42
5.4.2 atexit() *43
5.4.3 on_exit() *44
5.4.4 SIGCHLD *44
5.5 等待子进程*止 *44
5.5.* 等待*定进程 *47
5.5.2 等待子进程的其他方法 *49
5.5.3 BSD中的wait3()和wait4() *5*
5.5.4 *建并等待新进程 *52
5.5.5 僵尸进程 *55
5.6 用户和组 *55
5.6.* 改变实际用户/组ID和*留的用户/组ID *56
5.6.2 改变有效的用户ID或组ID *57
5.6.3 BSD改变用户ID和组ID的方式 *58
5.6.4 HP-UX中改变用户ID和组ID的方式 *58
5.6.5 操作用户ID/组ID的* 选方法 *59
5.6.6 对*留的用户ID的支持 *59
5.6.7 获取用户ID和组ID *59
5.7 会话(Session)和进程组 *60
5.7.* 与会话相关的系统调用 *6*
5.7.2 与进程组相关的系统调用 *63
5.7.3 废弃的进程组函数 *64
5.8 守护进程 *64
5.9 结束语 *67
第6章 * 级进程管理 *68
6.* 进程调度 *68
6.*.* 时间片 *69
6.*.2 I/O约束型进程和处理器约束型进程 *69
6.*.3 *占式调度 *70
6.2 完*公平调度器 *7*
6.3 让出处理器 *72
6.4 进程*先级 *73
6.4.* nice() *74
6.4.2 getpriority()和setpriority() *75
6.4.3 I/O*先级 *76
6.5 处理器*和力(Affinity) *77
6.6 实时系统 *80
6.6.* 硬实时系统和软实时系统 *80
6.6.2 延迟、抖动和截止期限 *8*
6.6.3 Linux的实时支持 *82
6.6.4 Linux调度策略和*先级 *82
6.6.5 设置调度参数 *86
6.6.6 sched_rr_get_interval() *89
6.6.7 关于实时进程的注意事项 *90
6.6.8 确定性 *9*
6.7 资源限制 *93
6.7.* 限制项 *94
6.7.2 获取和设置资源限制 *98
第7章 线程 200
7.* 二进制程序、进程和线程 200
7.2 多线程 20*
7.2.* 多线程代* 203
7.2.2 其他选择 203
7.3 线程模型 203
7.3.* 用户级线程模型 204
7.3.2 混合式线程模型 204
7.3.3 协同程序 205
7.4 线程模式 205
7.4.* 每个连接对应*个线程 206
7.4.2 事件驱动的线程模式 206
7.5 并发性、并行性和竞争 207
7.6 同步 2*0
7.6.* 互斥 2**
7.6.2 死锁 2*2
7.7 Pthreads 2*4
7.7.* Linux线程实现 2*4
7.7.2 Pthread API 2*5
7.7.3 *Pthreads 2*6
7.7.4 *建线程 2*6
7.7.5 线程ID 2*7
7.7.6 *止线程 2*8
7.7.7 join(加入)线程和detach(分离)线程 22*
7.7.8 线程编码实例 223
7.7.9 Pthread互斥 224
7.8 进*步研究 227
第8章 文件和目录管理 228
8.* 文件及其元数据 228
8.*.* *组stat函数 229
8.*.2 权限 233
8.*.3 所有权 234
8.*.4 扩展属性 237
8.*.5 扩展属性操作 239
8.2 目录 245
8.2.* 获取当前工作目录 246
8.2.2 *建目录 25*
8.2.3 删除目录 252
8.2.4 读取目录内容 253
8.3 * 256
8.3.* 硬* 256
8.3.2 符号* 258
8.3.3 解除* 259
8.4 拷贝和移动文件 26*
8.4.* 拷贝 26*
8.4.2 移动 26*
8.5 设备节点 263
8.5.* *殊设备节点 264
8.5.2 随机数生成器 264
8.6 带外通信(Out-of-Band Communication) 265
8.7 监视文件事件 266
8.7.* 初始化inotify 267
8.7.2 监视 268
8.7.3 inotify事件 270
8.7.4 * 级监视选项 273
8.7.5 删除inotify监视 273
8.7.6 获取事件队列大小 274
8.7.7 销毁inotify实例 274
第9章 内存管理 276
9.* 进程地址空间 276
9.*.* 页和页面调度 276
9.*.2 内存区域 278
9.2 动态内存分配 279
9.2.* 数组分配 28*
9.2.2 调整已分配内存大小 282
9.2.3 释放动态内存 283
9.2.4 对齐 285
9.3 数据段的管理 289
9.4 匿名内存映射 290
9.4.* *建匿名内存映射 29*
9.4.2 映射到设备文件/dev/zero 293
9.5 * 级内存分配 294
9.5.* 调试内存分配 297
9.5.2 获取统计信息 297
9.6 基于栈的分配 298
9.6.* 把字符串复制到栈中 300
9.6.2 变长数组 30*
9.7 选择合适的内存分配机制 302
9.8 内存操作 303
9.8.* 字节设置 303
9.8.2 字节比较 304
9.8.3 字节移动 305
9.8.4 字节查找 306
9.8.5 字节加密 306
9.9 内存锁定 307
9.9.* 锁定*分地址空间 307
9.9.2 锁定**地址空间 308
9.9.3 内存解锁 309
9.9.4 锁的限制 3*0
9.9.5 该页在物理内存中吗 3*0
9.*0 投机性内存分配策略 3**
第 *0章 信号 3*3
*0.* 信号相关的概念 3*3
*0.*.* 信号标识符 3*4
*0.*.2 Linux支持的信号 3*5
*0.2 基本信号管理 320
*0.2.* 等待信号 32*
*0.2.2 示例 322
*0.2.3 执行和继承 324
*0.2.4 把信号编号映射为字符串 325
*0.3 发送信号 326
*0.3.* 权限 326
*0.3.2 示例 327
*0.3.3 给进程本身发送信号 327
*0.3.4 给整个进程组发送信号 327
*0.4 重入 328
*0.5 信号集 330
*0.5.* 更多的信号集函数 33*
*0.5.2 获取待处理信号 332
*0.5.3 等待信号集 333
*0.6 * 级信号管理 333
*0.6.* 结构体siginfo_t 336
*0.6.2 si_code的相关说明 338
*0.6.3 发送带附加信息(payload)的信号 342
*0.6.4 示例 343
*0.7 信号是个UNIX“瑕疵”吗 343
第 **章 时间 345
**.* 时间的数据结构 347
**.*.* 原始表示 348
**.*.2 微秒级*度 348
**.*.3 更* 确的:纳秒级*度 348
**.*.4 对时间进行分解 349
**.*.5 进程时间类型 350
**.2 POSIX时钟 35*
**.3 时间源*度 35*
**.4 取得当前时间 353
**.4.* 更好的接口 353
**.4.2 * 级接口 354
**.4.3 获取进程时间 355
**.5 设置当前时间 356
**.5.* 设置支持**度的时间 356
**.5.2 设置时间的* 级接口 357
**.6 玩转时间 358
**.7 睡眠和等待 363
**.7.* 以微秒级*度睡眠 363
**.7.2 以纳秒级*度睡眠 365
**.7.3 实现睡眠的* 级方法 366
**.7.4 sleep的可移植实现 368
**.7.5 *时(Overrun) 368
**.7.6 睡眠的其他方式 369
**.8 定时器 369
**.8.* 简单的闹钟 369
**.8.2 计时器(interval timer) 370
**.8.3 * 级定时器 372
附录A C语言的GCC扩展 378
附录B 参考书目 390
作者介绍
Robert Love在很早期**直使用Linux并贡献代码,*括对Linux内核和GNOME桌面环境的贡献。Robert Love是Google软件工程师,是Android设计和开发团队成员。目前,他*力于Google的Web搜索架构。Robert获得了Florida大学的双学位:计算机科学理学学士和数学文学学士。
媒体评论
本书详细阐述了如何编写与Linux内核以及核心系统库提供的服务直接相关的软件。在这本书中,Linux内核贡献者Robert Love*面阐述了Linux系统编程,指导如何进行Linux系统调用,并从*家角度分析如何编写更*雅、运行更快的代码。 本书作者对POSIX标准函数和Linux提供的*些*定服务非常了解。本书第2版新增了*章*门介绍多线程,这是对第*版的更新和扩展,同时本书从理论和应用角度深入分析Linux,涉及的编程主题很广,*括以下*彩内容: Linux内核、C库和C编译器概览; 基础I/O操作,如文件读写; *级I/O接口、内存映射以及*化技术; 关于基本过程管理的系统调用; *级进程管理,*括实时进程; 线程概念,多线程编程和Pthreads; 文件和目录管理; 内存分配和*化内存访问相关的接口; 基本的和*级的信号接口,及其在系统中的作用; 时钟管理,*括POSIX时钟和**度计时器。
1