作品简介

本书将按照APUE的脉络,以笔者多年的Linux开发经验为基础,从以下四个方面深入讲解Linux环境编程:接口的功能使用介绍、接口缺陷分析、接口的内部实现机制、接口的错误码分析。本书将从一个全新的角度带领读者重新进入Linux环境编程,从应用出发,深入内核源码,研究Linux各接口的工作机制和原理。让读者不仅知其然,还知其所以然。

作者:高峰,李彬

作品目录

  • 前言
  • 第0章 基础知识
  • 0.1 一个Linux程序的诞生记
  • 0.2 程序的构成
  • 0.3 程序是如何“跑”的
  • 0.4 背景概念介绍
  • 第1章 文件I/O
  • 1.1 Linux中的文件
  • 1.2 打开文件
  • 1.3 creat简介
  • 1.4 关闭文件
  • 1.5 文件偏移
  • 1.6 读取文件
  • 1.7 写入文件
  • 1.8 文件的原子读写
  • 1.9 文件描述符的复制
  • 1.10 文件数据的同步
  • 1.11 文件的元数据
  • 1.12 文件截断
  • 第2章 标准I/O库
  • 2.1 stdin、stdout和stderr
  • 2.2 I/O缓存引出的趣题
  • 2.3 fopen和open标志位对比
  • 2.4 fdopen与fileno
  • 2.5 同时读写的痛苦
  • 2.6 ferror的返回值
  • 2.7 clearerr的用途
  • 2.8 小心fgetc和getc
  • 2.9 注意fread和fwrite的返回值
  • 2.10 创建临时文件
  • 第3章 进程环境
  • 3.1 main是C程序的开始吗
  • 3.2 “活雷锋”exit
  • 3.3 atexit介绍
  • 3.4 小心使用环境变量
  • 3.5 使用动态库
  • 3.6 避免内存问题
  • 3.7 “长跳转”longjmp
  • 第4章 进程控制:进程的一生
  • 4.1 进程ID
  • 4.2 进程的层次
  • 4.3 进程的创建之fork()
  • 4.4 进程的创建之vfork()
  • 4.5 daemon进程的创建
  • 4.6 进程的终止
  • 4.7 等待子进程
  • 4.8 exec家族
  • 4.9 system函数
  • 4.10 总结
  • 第5章 进程控制:状态、调度和优先级
  • 5.1 进程的状态
  • 5.2 进程调度概述
  • 5.3 普通进程的优先级
  • 5.4 完全公平调度的实现
  • 5.5 普通进程的组调度
  • 5.6 实时进程
  • 5.7 CPU的亲和力
  • 第6章 信号
  • 6.1 信号的完整生命周期
  • 6.2 信号的产生
  • 6.3 信号的默认处理函数
  • 6.4 信号的分类
  • 6.5 传统信号的特点
  • 6.6 信号的可靠性
  • 6.7 信号的安装
  • 6.8 信号的发送
  • 6.9 信号与线程的关系
  • 6.10 等待信号
  • 6.11 通过文件描述符来获取信号
  • 6.12 信号递送的顺序
  • 6.13 异步信号安全
  • 6.14 总结
  • 第7章 理解Linux线程(1)
  • 7.1 线程与进程
  • 7.2 进程ID和线程ID
  • 7.3 pthread库接口介绍
  • 7.4 线程的创建和标识
  • 7.5 线程的退出
  • 7.6 线程的连接与分离
  • 7.7 互斥量
  • 7.8 读写锁
  • 7.9 性能杀手:伪共享
  • 7.10 条件等待
  • 第8章 理解Linux线程(2)
  • 8.1 线程取消
  • 8.2 线程局部存储
  • 8.3 线程与信号
  • 8.4 多线程与fork()
  • 第9章 进程间通信:管道
  • 9.1 管道
  • 9.2 命名管道FIFO
  • 9.3 读写管道文件
  • 9.4 使用管道通信的示例
  • 第10章 进程间通信:System V IPC
  • 10.1 System V IPC概述
  • 10.2 System V消息队列
  • 10.3 System V信号量
  • 10.4 System V共享内存
  • 第11章 进程间通信:POSIX IPC
  • 11.1 POSIX IPC概述
  • 11.2 POSIX消息队列
  • 11.3 POSIX信号量
  • 11.4 内存映射mmap
  • 11.5 POSIX共享内存
  • 第12章 网络通信:连接的建立
  • 12.1 socket文件描述符
  • 12.2 绑定IP地址
  • 12.3 客户端连接过程
  • 12.4 服务器端连接过程
  • 12.5 TCP三次握手的实现分析
  • 第13章 网络通信:数据报文的发送
  • 13.1 发送相关接口
  • 13.2 数据包从用户空间到内核空间的流程
  • 13.3 UDP数据包的发送流程
  • 13.4 TCP数据包的发送流程
  • 13.5 IP数据包的发送流程
  • 13.6 底层模块数据包的发送流程
  • 第14章 网络通信:数据报文的接收
  • 14.1 系统调用接口
  • 14.2 数据包从内核空间到用户空间的流程
  • 14.3 UDP数据包的接收流程
  • 14.4 TCP数据包的接收流程
  • 14.5 TCP套接字的三个接收队列
  • 14.6 从网卡到套接字
  • 第15章 编写安全无错代码
  • 15.1 不要用memcmp比较结构体
  • 15.2 有符号数和无符号数的移位区别
  • 15.3 数组和指针
  • 15.4 再论数组首地址
  • 15.5 “神奇”的整数类型转换
  • 15.6 小心volatile的原子性误解
  • 15.7 有趣的问题:“x==x”何时为假?
  • 15.8 小心浮点陷阱
  • 15.9 Intel移位指令陷阱
展开全部