目 录 第1章 Linux编程环境 11.1 基本工具 11.1.1 免费大餐:Ubuntu 11.1.2 桌面系统:gnome 61.1.3 网络配置:纯手工打造 61.1.4 软件集散地:APT 81.1.5 无敌板斧:vi 101.1.6 开发圣典:man 131.1.7 配置共享目录 151.2 Shell命令 171.2.1 概念扫盲 171.2.2 命令详解 191.2.3 上古神器 381.3 Shell脚本编程 451.3.1 开场白 451.3.2 脚本格式 451.3.3 变量 461.3.4 特殊符号们 481.3.5 字符串处理 501.3.6 测试语句 511.3.7 脚本语法单元 521.4 编译器:GCC 551.4.1 简述 551.4.2 编译过程简介 551.4.3 实用的编译选项 581.5 解剖Makefile 591.5.1 工程管理器make 591.5.2 概览性示例 601.5.3 书写格式 601.5.4 变量详解 621.5.5 各种规则 711.5.6 条件判断 751.5.7 函数 771.5.8 实用make选项集锦 851.6 GNU-autotools 861.6.1 autotools简介 861.6.2 文件组织 871.6.3 configure.ac编写规则 88第2章 深度Linux-C 922.1 基本要素 922.1.1 Linux下C代码规范 932.1.2 基本数据类型 972.1.3 运算符 1082.1.4 控制流 1162.2 函数 1242.2.1 函数初体验 1252.2.2 函数调用内幕 1282.2.3 递归思维及其实现 1302.2.4 变参函数 1332.2.5 回调函数 1372.2.6 内联函数 1402.3 数组与指针 1422.3.1 数组初阶 1422.3.2 内存地址 1442.3.3 指针初阶 1452.3.4 复杂指针定义 1472.3.5 指针运算 1512.3.6 数组与指针 1522.3.7 复杂数组剖析 1552.3.8 const指针 1582.3.9 char指针和char数组 1602.4 内存管理 1622.4.1 进程内存布局 1622.4.2 堆(Heap) 1642.5 组合数据类型 1672.5.1 结构体 1672.5.2 共用体 1712.5.3 枚举 1722.6 高级议题 1732.6.1 工程代码组织 1732.6.2 头文件 1752.6.3 宏(macro) 1762.6.4 条件编译 1822.6.5 复杂声明 1842.6.6 attribute机制 185第3章 Linux的数据组织 1883.1 无所不在的链表 1883.1.1 开场白 1883.1.2 单向链表 1903.1.3 单向循环链表 1983.1.4 双向循环链表 2003.1.5 Linux内核链表 2103.2 线性表变异体 2273.2.1 堆叠的盘子:栈 2273.2.2 文明的社会:队列 2363.3 小白慎入:非线性结构 2433.3.1 基本概念 2433.3.2 玩转BST 2473.3.3 各种的遍历算法 2603.3.4 自平衡AVL树 2633.3.5 自平衡Linux红黑树 273第4章 I/O编程技术 2894.1 一切皆文件 2894.1.1 文件的概念 2894.1.2 各类文件 2904.2 文件操作 2904.2.1 系统I/O 2914.2.2 标准I/O 3064.2.3 文件属性 3204.3 目录检索 3274.3.1 基本概念 3274.3.2 相关API 3284.4 触控屏应用接口 3304.4.1 输入子系统简介 3304.4.2 TSLIB库详解 3334.4.3 划屏算法 338第5章 Linux进程线程 3455.1 Linux进程入门 3455.1.1 进程概念 3455.1.2 进程组织方式 3465.2 进程的“生老病死” 3485.2.1 进程状态 3485.2.2 相关重要API 3505.3 进程的语言 3585.3.1 管道 3585.3.2 信号 3635.3.3 system-V IPC简介 3805.3.4 消息队列(MSG) 3815.3.5 共享内存(SHM) 3875.3.6 信号量(SEM) 3925.4 Linux线程入门 4005.4.1 线程基本概念 4005.4.2 线程API及特点 4015.5 线程安全 4105.5.1 POSIX信号量 4105.5.2 互斥锁与读写锁 4155.5.3 条件变量 4185.5.4 可重入函数 4215.6 线程池 4225.6.1 实现原理 4225.6.2 接口设计 4235.6.3 实现源码 425第6章 Linux音频、视频编程 4336.1 基本背景 4336.2 Linux音频 4336.2.1 音频概念 4336.2.2 标准音频接口ALSA 4366.3 Linux视频输出 4506.3.1 基本概念 4506.3.2 framebuffer 4526.3.3 在LCD上画图 4626.3.4 效果算法 4696.4 Linux视频输入 4786.4.1 V4L2简介 4786.4.2 V4L2视频采集流程 4786.4.3 V4L2核心命令字和结构体 4816.4.4 编码格式和媒体流 4846.5 多媒体开发库SDL 4896.5.1 SDL简介 4896.5.2 编译和移植 4896.5.3 视频子系统 4906.5.4 音频子系统 4946.5.5 事件子系统 4986.5.6 处理YUV视频源 5026.6 音/视频编解码库FFmpeg 5046.6.1 FFmpeg简介 5046.6.2 核心结构体与常用API 5056.6.3 与SDL结合实现简单的播放器 511