第1章 Linux基础知识 1
1.1 Linux的历史 1
1.2 Linux目录结构 1
1.3 Linux常用命令 2
1.3.1 su(用户切换) 2
1.3.2 useradd(添加用户) 3
1.3.3 passwd(修改密码) 3
1.3.4 进程相关(系统管理)命令 4
1.3.5 磁盘相关命令(fdisk) 4
1.3.6 pwd(显示工作目录) 4
1.3.7 cd(改变工作目录) 5
1.3.8 ls(查看文件/目录) 5
1.3.9 mkdir(创建目录) 6
1.3.10 cp(文件/目录复制) 7
1.3.11 mv(文件/目录改名、移动) 7
1.3.12 rm(文件/目录删除) 8
1.3.13 cat(查看文件内容) 8
1.3.14 more(分页显示文件内容) 9
1.3.15 less(分页显示文件内容) 10
1.3.16 管道与命令替换 11
1.3.17 umask(文件/目录创建掩码) 11
1.3.18 chgrp(改变文件/目录所属的组) 11
1.3.19 chown(更改某个文件/目录的所有者和属组) 11
1.3.20 chmod(修改文件权限) 12
1.3.21 find(文件查找) 14
1.3.22 locate(快速文件查找) 16
1.3.23 In(建立符号链接) 16
1.3.24 whereis和which(查找命令所在目录) 17
1.3.25 grep(搜索文件内容) 17
1.3.26 tar(压缩解压) 18
1.3.27 gzip/gunzip和bzip2/bunzip2(文件压缩/解压缩) 20
1.3.28 unzip(winzip文件解压缩) 22
1.3.29 ifcofig及网络相关命令 23
1.3.30 Linux下编程环境 23
1.4 vi编辑器 23
1.5 Linux常用技巧 25
1.5.1 使用“Tab”键 25
1.5.2 Ret Hat Linux启动到字符界面(不启动XWindow) 26
1.5.3 挂接USB闪存 26
1.5.4 不用samba或ftp,利用VM自身实现本机与虚拟机的文件共享 27
1.5.5 其他常用命令 28
1.5.6 如何配置vim脚本功能及vim中设置多窗口 29
1.5.7 Shell编程 31
第2章 Linux环境下的编译与调试 45
2.1 gcc/g++编译器 45
2.1.1 gcc/g++编译过程 45
2.1.2 静态库和动态库 48
2.1.3 gcc警告和优化选项 52
2.2 make工程管理器和Makefile 54
2.2.1 Makefile中特殊处理与伪目标 55
2.2.2 变量、规则与函数 56
2.3 gdb调试器 60
2.3.1 gdb的常用命令 60
2.3.2 gdb应用举例 62
第3章 Linux文件目录操作 64
3.1 基于文件指针的文件操作(缓冲) 64
3.1.1 文件的创建、打开与关闭 64
3.1.2 读写文件 65
3.1.3 文件定位 68
3.1.4 标准输入/输出流 69
3.1.5 目录操作 69
3.2 基于文件描述符的文件操作(非缓冲) 73
3.2.1 文件描述符 73
3.2.2 打开、创建和关闭文件 73
3.2.3 读写文件 75
3.2.4 改变文件大小 77
3.2.5 文件定位 77
3.2.6 原子操作 78
3.2.7 进一步理解文件描述符 78
3.2.8 文件描述符的复制 79
3.2.9 文件的锁定 81
3.2.10 获取文件信息 86
3.2.11 access函数 88
3.2.12 标准输入/输出文件描述符 89
3.2.13 时间和日期相关函数 90
3.2.14 处理的模型(补充) 91
3.2.15 串口编程 95
3.2.16 日志 103
第4章 Linux多进程 105
4.1 Linux进程概述 105
4.1.1 进程标识 105
4.1.2 进程的用户ID与组ID(进程的运行身份) 105
4.1.3 进程的状态 108
4.1.4 Linux下的进程结构及管理 108
4.2 Linux进程的创建与控制 109
4.2.1 fork函数 109
4.2.2 进程的终止 112
4.2.3 wait和waitpid函数 113
4.2.4 exec函数族 116
4.2.5 system函数 120
4.2.6 popen函数 120
4.3 守护进程 121
第5章 Linux信号处理 125
5.1 信号概念 125
5.2 signal信号处理机制 126
5.3 sigaction信号处理机制 128
5.3.1 信号处理情况分析 128
5.3.2 sigaction信号处理注册 130
5.3.3 sigprocmask信号阻塞 134
5.4 用程序发送信号 136
5.4.1 kill和raise信号发送函数 136
5.4.2 sigqueue信号发送函数 137
5.5 计时器与信号 140
5.5.1 睡眠函数 140
5.5.2 时钟处理 141
第6章 进程间通信 144
6.1 进程间通信(IPC)简介 144
6.2 标准管道流 145
6.3 无名管道(PIPE) 146
6.4 命名管道(FIFO) 149
6.4.1 创建、删除FIFO文件 149
6.4.2 打开、关闭FIFO文件 150
6.4.3 读写FIFO 150
6.5 内存映射 151
6.6 System V共享内存机制 156
6.7 消息队列 159
6.8 信号量 163
6.8.1 System V IPC机制:信号量 164
6.8.2 Posix有名信号量 170
第7章 Linux多线程 175
7.1 Linux多线程概述 175
7.1.1 多线程概述 175
7.1.2 线程分类 176
7.1.3 线程创建的Linux实现 176
7.2 线程的创建和退出 176
7.3 线程的等待退出 178
7.3.1 等待线程退出 178
7.3.2 线程的取消 180
7.3.3 线程终止清理函数 182
7.4 线程的互斥 184
7.5 线程的同步 191
7.5.1 条件变量 191
7.5.2 信号灯 197
7.6 生产者消费者问题 200
7.7 线程的属性 204
第8章 Linux网络编程 208
8.1 Linux网络编程介绍 208
8.1.1 TCP/IP概述 208
8.1.2 OSI参考模型及TCP/IP参考模型 208
8.1.3 TCP 210
8.1.4 UDP 212
8.1.5 协议的选择 212
8.2 网络相关概念 213
8.2.1 Socket概念 214
8.2.2 Socket类型 214
8.2.3 Socket的信息数据结构 215
8.2.4 数据存储优先顺序的转换 215
8.2.5 地址格式转化 216
8.2.6 名字地址转化 217
8.3 Socket编程 220
8.3.1 使用TCP的流程图 220
8.3.2 使用UDP的流程图 237
8.3.3 设置套接口的选项setsockopt的用法 242
第9章 系统编程的例子 244
附录A C语言文件操作详解 257
附录B 虚拟内存(VM) 266
附录C ping命令解析 274
附录D 大端小端 285