Linux C编程一站式学习
来源:百度文库 编辑:神马文学网 时间:2024/04/29 06:57:58
Linux C编程一站式学习
打包下载 docbook源码下载宋劲杉
北京亚嵌教育研究中心
版权 © 2008, 2009 宋劲杉, 北京亚嵌教育研究中心
本书前两部分已整理出版,详见http://www.china-pub.com/196188,http://www.douban.com/subject/4141733,由于和出版社之间的协议,出版的最新版本将延迟一段时间才能在网上公开源文件。谢谢大家的支持!最近收到一些读者回应,特在此做出答复:
- 本站公开的版本和出版的最新版本有一些差异,显然是出版的版本更完善一些,但出版的版本迟早一定会在本站公开的,这是由GFDL许可证保证的
- 本书的前两部分已经整理得很完善,并且自成体系,然而第三部分还有大量工作未完成,所以出版的版本只包含前两部分,也许以后第三部分会继续在本站更新,也会整理到本书的第二版中,但笔者最近忙于生计,已没有以前的心情,出第二版可能要在一两年之后,也可能不会有第二版了
Permission is granted to copy, distribute and/or modify this document under the terms of the
2009.7.31
添加了GFDL许可证,正式网络发布。第三部分还很粗糙,错误也有不少,有待改进。第一部分和第二部分已经比较成熟,第二部分还差三章没写。
修订 0.7 2009.4.24全书的章节基本完成,但有些章节还很不完善。
目录
- 历史
- 前言
- I. C语言入门
- 1. 程序的基本概念
- 1. 程序和编程语言
- 2. 自然语言和形式语言
- 3. 程序的调试
- 4. 第一个程序
- 2. 常量、变量和表达式
- 1. 继续Hello World
- 2. 常量
- 3. 变量
- 4. 赋值
- 5. 表达式
- 6. 字符类型与字符编码
- 3. 简单函数
- 1. 数学函数
- 2. 自定义函数
- 3. 形参和实参
- 4. 全局变量、局部变量和作用域
- 4. 分支语句
- 1. if语句
- 2. if/else语句
- 3. 布尔代数
- 4. switch语句
- 5. 深入理解函数
- 1. return语句
- 2. 增量式开发
- 3. 递归
- 6. 循环语句
- 1. while语句
- 2. do/while语句
- 3. for语句
- 4. break和continue语句
- 5. 嵌套循环
- 6. goto语句和标号
- 7. 结构体
- 1. 复合类型与结构体
- 2. 数据抽象
- 3. 数据类型标志
- 4. 嵌套结构体
- 8. 数组
- 1. 数组的基本概念
- 2. 数组应用实例:统计随机数
- 3. 数组应用实例:直方图
- 4. 字符串
- 5. 多维数组
- 9. 编码风格
- 1. 缩进和空白
- 2. 注释
- 3. 标识符命名
- 4. 函数
- 5. indent工具
- 10. gdb
- 1. 单步执行和跟踪函数调用
- 2. 断点
- 3. 观察点
- 4. 段错误
- 11. 排序与查找
- 1. 算法的概念
- 2. 插入排序
- 3. 算法的时间复杂度分析
- 4. 归并排序
- 5. 线性查找
- 6. 折半查找
- 12. 栈与队列
- 1. 数据结构的概念
- 2. 堆栈
- 3. 深度优先搜索
- 4. 队列与广度优先搜索
- 5. 环形队列
- 13. 本阶段总结
- II. C语言本质
- 14. 计算机中数的表示
- 1. 为什么计算机用二进制计数
- 2. 不同进制之间的换算
- 3. 整数的加减运算
- 3.1. Sign and Magnitude表示法
- 3.2. 1's Complement表示法
- 3.3. 2's Complement表示法
- 3.4. 有符号数和无符号数
- 4. 浮点数
- 15. 数据类型详解
- 1. 整型
- 2. 浮点型
- 3. 类型转换
- 3.1. Integer Promotion
- 3.2. Usual Arithmetic Conversion
- 3.3. 由赋值产生的类型转换
- 3.4. 强制类型转换
- 3.5. 编译器如何处理类型转换
- 16. 运算符详解
- 1. 位运算
- 1.1. 按位与、或、异或、取反运算
- 1.2. 移位运算
- 1.3. 掩码
- 1.4. 异或运算的一些特性
- 2. 其它运算符
- 2.1. 复合赋值运算符
- 2.2. 条件运算符
- 2.3. 逗号运算符
- 2.4. sizeof运算符与typedef类型声明
- 3. Side Effect与Sequence Point
- 4. 运算符总结
- 17. 计算机体系结构基础
- 1. 内存与地址
- 2. CPU
- 3. 设备
- 4. MMU
- 5. Memory Hierarchy
- 18. x86汇编程序基础
- 1. 最简单的汇编程序
- 2. x86的寄存器
- 3. 第二个汇编程序
- 4. 寻址方式
- 5. ELF文件
- 5.1. 目标文件
- 5.2. 可执行文件
- 19. 汇编与C之间的关系
- 1. 函数调用
- 2.
main
函数和启动例程 - 3. 变量的存储布局
- 4. 结构体和联合体
- 5. C内联汇编
- 6. volatile限定符
- 20. 链接详解
- 1. 多目标文件的链接
- 2. 定义和声明
- 2.1.
extern
和static
关键字 - 2.2. 头文件
- 2.3. 定义和声明的详细规则
- 2.1.
- 3. 静态库
- 4. 共享库
- 4.1. 编译、链接、运行
- 4.2. 动态链接的过程
- 4.3. 共享库的命名惯例
- 5. 虚拟内存管理
- 21. 预处理
- 1. 预处理的步骤
- 2. 宏定义
- 2.1. 函数式宏定义
- 2.2. 内联函数
- 2.3.
#
、##
运算符和可变参数 - 2.4. 宏展开的步骤
- 3. 条件预处理指示
- 4. 其它预处理特性
- 22. Makefile基础
- 1. 基本规则
- 2. 隐含规则和模式规则
- 3. 变量
- 4. 自动处理头文件的依赖关系
- 5. 常用的
make
命令行选项
- 23. 指针
- 1. 指针的基本概念
- 2. 指针类型的参数和返回值
- 3. 指针与数组
- 4. 指针与
const
限定符 - 5. 指针与结构体
- 6. 指向指针的指针与指针数组
- 7. 指向数组的指针与多维数组
- 8. 函数类型和函数指针类型
- 9. 不完全类型和复杂声明
- 24. 函数接口
- 1. 本章的预备知识
- 1.1.
strcpy
与strncpy
- 1.2.
malloc
与free
- 1.1.
- 2. 传入参数与传出参数
- 3. 两层指针的参数
- 4. 返回值是指针的情况
- 5. 回调函数
- 6. 可变参数
- 25. C标准库
- 1. 字符串操作函数
- 1.1. 初始化字符串
- 1.2. 取字符串的长度
- 1.3. 拷贝字符串
- 1.4. 连接字符串
- 1.5. 比较字符串
- 1.6. 搜索字符串
- 1.7. 分割字符串
- 2. 标准I/O库函数
- 2.1. 文件的基本概念
- 2.2. fopen/fclose
- 2.3. stdin/stdout/stderr
- 2.4. errno与perror函数
- 2.5. 以字节为单位的I/O函数
- 2.6. 操作读写位置的函数
- 2.7. 以字符串为单位的I/O函数
- 2.8. 以记录为单位的I/O函数
- 2.9. 格式化I/O函数
- 2.10. C标准库的I/O缓冲区
- 2.11. 本节综合练习
- 3. 数值字符串转换函数
- 4. 分配内存的函数
- 26. 链表、二叉树和哈希表
- 1. 链表
- 1.1. 单链表
- 1.2. 双向链表
- 1.3. 静态链表
- 1.4. 本节综合练习
- 2. 二叉树
- 2.1. 二叉树的基本概念
- 2.2. 排序二叉树
- 3. 哈希表
- 27. 本阶段总结
- III. Linux系统编程
- 28. 文件与I/O
- 1. 汇编程序的Hello world
- 2. C标准I/O库函数与Unbuffered I/O函数
- 3. open/close
- 4. read/write
- 5. lseek
- 6. fcntl
- 7. ioctl
- 8. mmap
- 29. 文件系统
- 1. 引言
- 2. ext2文件系统
- 2.1. 总体存储布局
- 2.2. 实例剖析
- 2.3. 数据块寻址
- 2.4. 文件和目录操作的系统函数
- 3. VFS
- 3.1. 内核数据结构
- 3.2. dup和dup2函数
- 30. 进程
- 1. 引言
- 2. 环境变量
- 3. 进程控制
- 3.1. fork函数
- 3.2. exec函数
- 3.3. wait和waitpid函数
- 4. 进程间通信
- 4.1. 管道
- 4.2. 其它IPC机制
- 5. 练习:实现简单的Shell
- 31. Shell脚本
- 1. Shell的历史
- 2. Shell如何执行命令
- 2.1. 执行交互式命令
- 2.2. 执行脚本
- 3. Shell的基本语法
- 3.1. 变量
- 3.2. 文件名代换(Globbing):* ? []
- 3.3. 命令代换:`或 $()
- 3.4. 算术代换:$(())
- 3.5. 转义字符\
- 3.6. 单引号
- 3.7. 双引号
- 4. bash启动脚本
- 4.1. 作为交互登录Shell启动,或者使用--login参数启动
- 4.2. 以交互非登录Shell启动
- 4.3. 非交互启动
- 4.4. 以sh命令启动
- 5. Shell脚本语法
- 5.1. 条件测试:test [
- 5.2. if/then/elif/else/fi
- 5.3. case/esac
- 5.4. for/do/done
- 5.5. while/do/done
- 5.6. 位置参数和特殊变量
- 5.7. 函数
- 6. Shell脚本的调试方法
- 32. 正则表达式
- 1. 引言
- 2. 基本语法
- 3. sed
- 4. awk
- 5. 练习:在C语言中使用正则表达式
- 33. 信号
- 1. 信号的基本概念
- 2. 产生信号
- 2.1. 通过终端按键产生信号
- 2.2. 调用系统函数向进程发信号
- 2.3. 由软件条件产生信号
- 3. 阻塞信号
- 3.1. 信号在内核中的表示
- 3.2. 信号集操作函数
- 3.3. sigprocmask
- 3.4. sigpending
- 4. 捕捉信号
- 4.1. 内核如何实现信号的捕捉
- 4.2. sigaction
- 4.3. pause
- 4.4. 可重入函数
- 4.5. sig_atomic_t类型与volatile限定符
- 4.6. 竞态条件与sigsuspend函数
- 4.7. 关于SIGCHLD信号
- 34. 终端、作业控制与守护进程
- 1. 终端
- 1.1. 终端的基本概念
- 1.2. 终端登录过程
- 1.3. 网络登录过程
- 2. 作业控制
- 2.1. Session与进程组
- 2.2. 与作业控制有关的信号
- 3. 守护进程
- 35. 线程
- 1. 线程的概念
- 2. 线程控制
- 2.1. 创建线程
- 2.2. 终止线程
- 3. 线程间同步
- 3.1. mutex
- 3.2. Condition Variable
- 3.3. Semaphore
- 3.4. 其它线程间同步机制
- 4. 编程练习
- 36. TCP/IP协议基础
- 1. TCP/IP协议栈与数据包封装
- 2. 以太网(RFC 894)帧格式
- 3. ARP数据报格式
- 4. IP数据报格式
- 5. IP地址与路由
- 6. UDP段格式
- 7. TCP协议
- 7.1. 段格式
- 7.2. 通讯时序
- 7.3. 流量控制
- 37. socket编程
- 1. 预备知识
- 1.1. 网络字节序
- 1.2. socket地址的数据类型及相关函数
- 2. 基于TCP协议的网络程序
- 2.1. 最简单的TCP网络程序
- 2.2. 错误处理与读写控制
- 2.3. 把client改为交互式输入
- 2.4. 使用fork并发处理多个client的请求
- 2.5. setsockopt
- 2.6. 使用select
- 3. 基于UDP协议的网络程序
- 4.
UNIX Domain Socket IPC - 5. 练习:实现简单的Web服务器
- 5.1. 基本HTTP协议
- 5.2. 执行CGI程序
- A. 字符编码
- 1. ASCII码
- 2. Unicode和UTF-8
- 3. 在Linux C编程中使用Unicode和UTF-8
- B. GNU Free Documentation License Version 1.3, 3 November 2008
- 参考书目
- 索引
Linux C编程一站式学习
学习linux/unix编程方法
linux操作系统下c语言编程入门
linux操作系统下c语言编程入门
Linux操作系统下C语言编程入门
Linux下C语言编程2
Linux下的C语言编程-网络编程
VIM GDB linux c/c 的编程利器
学习linux/unix编程方法的建议
学习linux/unix编程方法的建议
你应当如何学习C++(以及编程)
Linux环境下的Socket编程 - C&C - Linux技术中坚站
Linux操作系统下C语言编程的注意事项
Linux下C语言编程--文件的操作
Linux操作系统下C语言编程的注意事项
Linux系统下C语言编程基础知识介绍 - Linux/Unix社区 / 实用资料发布区
CSDN技术中心 Linux Shell编程学习笔记
linux操作系统下c语言编程入门--兴趣是最好的老师
Linux C编程源代??2)--进程控制(fork调用-wait调用-僵尸进程-exec...
Linux C编程源代??2)--进程控制(fork调用-wait调用-僵尸进程-exec
Linux C编程源代??2)--进程控制(fork调用-wait调用-僵尸进程-
linux下c编程常识 - 阿勇__王者归来 - Linuxeden博客家园 - Powe...
3.?在Linux C编程中使用Unicode和UTF-8
Linux下C语言编程基础(Makefile) - Linx时代 - ChinaUnix.net