第一章 引言
系统编程
本书目标
- 强化编程背景知识
- 动态数据结构应用:C结构、指针、链表、链树
- 进程概念和进程管理
- 并行计算:线程
- 定时器和定时功能
- 信号、信号处理和进程间通信
- 文件系统
- TCPIP和网络编程:TCPIP协议、套接字API、UDP和TCP套接字编程,以及网络计算中的服务器-客户机模型
Unix
- AT&T Unix
- Berkeley Unix
- HP Unix
- IBM Unix
- Sun Unix
Linux
- Debian Linux
- Ubuntu Linux
- Linux Mint
- 基于RPM的Linux
- Slackware Linux
虚拟机上的Linux
- VirtualBox
- VMware
- 双启动的Slackware和Ubuntu Linux
使用linux
- Linux内核映像:vmlinuz-generic-VERSION_NUMBER *一个可启动的内核映像有三部分组成:|BOOT|SETUP|linux kernel|
- 启动程序:GRUB LILO HD
- 启动
- 运行级别:单用户模式启动
- 登录进程:三个文件流stdin、stdout、stderr,等待用户登录
- 命令执行:执行命令解释程序sh,后者将提示用户执行命令
使用Ubuntu Linux
-
UnixLinux文件系统组织
树形组织结构
-
命令
-
手册页
Ubuntu Linux系统管理
- 用户账户
- 添加新用户:sudo adduer username
- sudo命令
第二章 编程背景
文本编辑器
- vim
- gedit
- emacs
程序开发
开发步骤
- 创建源文件
- 用gcc把源文件转换成二进制可执行文件a.out
什么是gcc
一个程序,包含三个步骤:将源文件转换为汇编代码文件;把汇编代码转换成目标代码;链接
静态与动态链接
创建二进制可执行文件的方式有两种:静态链接和动态链接分别使用静态库和共享库。
可执行文件格式
- 二进制可执行平面文件
- a.out可执行文件
- ELF可执行文件
a.out文件的内容
- 文件头、代码段、数据段、符号表
程序执行过程
- 读取a.out文件,一标记字符串作为命令行参数
- sh从总大小中分配一个内存区给执行映像
- sh放弃旧映像,开始执行新映像
- 执行从crt0.o开始,调用main,将argc和argv作为采纳数传递给main
程序终止
- 正常终止
- 异常终止
链接库
- 静态链接库
- 动态链接库
makefile
make工具是一个程序,它按照顺序读取makefile,以自动有选择的执行编译链接
-
格式
make文件有一系列目标项、依赖项和规则组成
-
程序
当make程序读取makefile时,通过比较依赖项列表中源文件的时间戳来确定要构建哪些目标项
GDB调试工具
C语言相关知识
- 函数调用
- 结构体指针
- 链表处理
- 树、二叉树