第1章 Linux基础 1
1.1 什么是Linux? 1
1.1.1 Linux操作系统特点 1
1.1.2 Linux操作系统组成部分 1
1.2 Linux版本及Fedora操作系统 2
1.2.1 Linux内核版本 2
1.2.2 Linux发行版 2
1.2.3 Fedora操作系统 3
1.2.4 Fedora发行方式 3
1.2.5 Fedora系统安装基本要求 3
1.3 Fedora 20的安装 4
1.3.1 虚拟机下的Fedora 20的安装准备 4
1.3.2 Fedora 20安装 5
1.4 Linux常用命令 7
1.4.1 Linux命令执行方法 8
1.4.2 Linux常用各种命令 8
1.5 VI编辑器的使用 24
1.6 POSIX标准和LSB标准 27
总结 28
习题 28
第2章 Linux编程环境 29
2.1 GCC编译器的使用 29
2.1.1 GCC编译器简介 29
2.1.2 GCC常用选项:预处理控制 30
2.1.3 GCC常用选项:编译及警告信息控制选项 31
2.1.4 GCC常用选项:C语言标准控制选项和程序调试及优化选项 33
2.1.5 GCC常用选项:搜索路径控制和GCC链接选项 34
2.1.6 利用GCC创建库文件 34
2.2 GDB调试器的使用 37
2.2.1 GDB调试器的使用 37
2.2.2 GDB调试器使用实例 43
2.3 Make工具 44
2.3.1 第一个Makefile文件 45
2.3.2 Makefile编写规则 46
2.3.3 Make的基本工作原理及过程 46
2.3.4 Makefile文件 47
总结 59
习题 60
第3章 Shell编程 61
3.1 Shell基础 61
3.1.1 Shell交互方式 61
3.1.2 Shell基本功能 61
3.2 Bash编程 62
3.3 Shell中的特殊字符 63
3.3.1 转义符“\” 63
3.3.2 单引号 64
3.3.3 双引号 64
3.3.4 命令替换符号 65
3.4 Shell变量 65
3.4.1 Shell用户变量定义 65
3.4.2 Shell环境变量 66
3.4.3 Shell内部变量 67
3.4.4 Shell参数扩展 67
3.4.5 Shell变量的算术扩展 68
3.4.6 条件表达式 69
3.4.7 Shell字符串操作 71
3.5 Shell控制语句 73
3.5.1 条件语句 73
3.5.2 循环语句 75
3.6 Shell其他命令 77
3.6.1 管道命令 77
3.6.2 重定向命令 78
3.6.3 echo命令 79
3.6.4 shift命令 79
3.7 Shell函数 80
3.8 Shell数组 81
3.9 Shell中Dialog工具 82
3.10 Bash调试 84
总结 85
习题 86
第4章 文件I/O操作 87
4.1 概述 87
4.2 文件I/O操作 87
4.2.1 文件的创建 88
4.2.2 文件的打开及关闭 88
4.2.3 文件的读取/写入 89
4.2.4 文件的定位 90
4.2.5 文件删除 90
4.2.6 文件描述符属性控制fcntl 91
4.2.7 文件操作实例 95
4.3 目录 97
4.3.1 目录概述 97
4.3.2 Linux文件系统ext2基本结构 98
4.3.3 与目录有关的系统调用 100
4.4 文件与目录的属性 102
4.4.1 获得文件或目录属性 102
4.4.2 文件或目录的模式 103
4.4.3 符号链接 105
4.4.4 文件属性的更改 107
4.5 标准文件I/O 108
4.6 处理系统调用中的错误 109
总结 110
习题 110
第5章 Linux进程管理 112
5.1 进程基本概念 112
5.2 进程创建和命令执行 113
5.3 进程退出 117
5.3.1 守护进程 118
5.3.2 僵尸进程 120
5.3.3 进程退出状态 121
5.4 进程开发实例 123
总结 124
习题 124
第6章 信号及信号处理 126
6.1 信号的基本概念 126
6.1.1 信号的使用和产生 126
6.1.2 信号的状态 127
6.2 信号的分类 127
6.2.1 可靠与不可靠信号 127
6.2.2 实时信号与非实时信号 127
6.3 信号的处理 128
6.3.1 signal信号处理机制 129
6.3.2 sigaction信号处理机制 131
6.4 信号发送函数 134
6.5 可重入函数 135
6.6 父子进程的信号处理 136
6.7 信号处理机制的应用 137
6.8 系统定时信号 138
6.8.1 睡眠函数 138
6.8.2 计时器 139
总结 140
习题 141
第7章 进程间通信 142
7.1 进程间通信基本概念 142
7.1.1 进程通信的作用 142
7.1.2 进程通信的实现和方法 142
7.2 管道通信 143
7.2.1 无名管道 144
7.2.2 管道与重定向 146
7.2.3 popen的介绍 149
7.2.4 命名管道 151
7.3 System V信号量 156
7.3.1 信号量的用法 156
7.3.2 信号量实例 157
7.4 POSIX有名信号量 160
7.4.1 POSIX有名信号量的使用 160
7.4.2 有名信号量实例 161
7.5 共享内存 163
7.5.1 共享内存步骤 164
7.5.2 System V共享内存API 164
7.5.3 共享内存实例 165
7.5.4 mmap共享内存机制 168
7.6 消息队列 171
7.6.1 消息队列的实现原理 171
7.6.2 消息队列系统调用 171
7.6.3 消息队列实例 173
总结 175
习题 175
第8章 多线程编程 177
8.1 多线程概念 177
8.2 线程状态与线程编程 178
8.2.1 线程的创建和参数传递 178
8.2.2 线程终止pthread_exit 180
8.2.3 线程挂起pthread_join 183
8.2.4 线程其他相关系统调用 184
8.3 线程的同步与互斥 184
8.3.1 互斥量 184
8.3.2 互斥量的使用 185
8.3.3 信号量 188
8.3.4 信号量的使用方法 188
8.3.5 条件变量 192
8.3.6 条件变量的使用 192
总结 195
习题 195
第9章 Linux网络编程 197
9.1 计算机网络概述 197
9.1.1 计算机网络的组成及特点 197
9.1.2 计算机网络协议 197
9.1.3 网络协议分层 198
9.1.4 TCP/IP 198
9.1.5 Client/Server模型 199
9.1.6 Linux网络编程概述 199
9.1.7 网络协议栈 199
9.2 Socket编程 200
9.2.1 什么是Socket? 200
9.2.2 Socket编程基本系统调用 201
9.2.3 Socket stream服务 208
9.2.4 Socket数据包服务 211
9.2.5 Socket原始套接字服务 213
9.3 Linux网络编程高级I/O 218
9.3.1 Socket阻塞/非阻塞方式 218
9.3.2 非阻塞Socekt用法 220
9.3.3 Socket与多路复用 222
9.4 Linux网络并发编程 235
总结 239
习题 239
第10章 Linux下的数据库编程 240
10.1 MySQL数据库简介 240
10.1.1 Linux数据库编程应用 240
10.1.2 MySQL API的两种形式 241
10.1.3 MySQL C API的使用 241
10.2 Linux数据库编程基本方法 241
10.3 MySQL数据库数据结构及API 242
10.3.1 数据结构 242
10.3.2 MySQL操作API 242
10.4 MySQL数据库编程实例 248
总结 253
习题 253
附录 Linux编程基础实验 254
实验一 Linux基本命令使用(验证性实验) 254
实验二 Linux Shell编程(设计性实验) 258
实验三 Makefile实验(验证性和设计性) 259
实验四 GCC/GDB实验 262
实验五 Linux文件系统编程 264
实验六 Linux多进程与进程间通信 267
参考文献 268