《Unix/Linux系统编程》第1、2章学习笔记 第一章 引言 第二章 编程背景
系统编程
系统编程是计算机科学和计算机工程教育不可或缺的一部分,对学习操作系统、嵌入式系统、数据库系统、数据挖掘、人工智能等方面有着重要的作用。
本书目标
- 强化编程背景知识
- 详细介绍了程序开发步骤,包括汇报器、编译器、链接器等。
- 动态数据结构的应用
- 字符串标记化、搜索树节点、插入和删除树节点等。
- 进程概念和进程管理
- fork()、exit()、wait()等
- 并发编程
- Pthreads 编程、线程连接、互斥量等
- 定时器和定时功能
- 信号、信号处理和进程间通信
- 文件系统
- 存储设备、UnixLinux内核中的文件系统支持、文件操作的系统调用、库I/O函数等。
- TCP/IP和网络编程
- 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
VirtualBox 安装Ubuntu
- 下载VirtualBox(http://download.virtualbox.org)
- 安装VirtualBox
- 创建VirtualBox虚拟机
- 下载Ubuntu
- 安装Ubuntu
使用Ubuntu Linux
- Linux内核映像
- Linux内核映像位于/boot目录中,一个可启动的Linux内核映像由三部分组成: |BOOT|SETUP|linux kernel|
- Linux启动程序
- 最受欢迎的有GRUB和LILO。
- Linux启动
- 加载BOOT+SETUP至实模式内存的0x90000处
- 加载Linux内核至高端内存的1MB处
- Linux运行级别
- Linux内核以单用户模式启动,以多用户模式运行。
- 登录进程
- 三个文件流stdin、stdout、stderr,等待用户登录。
- 命令执行
- 执行命令解释程序sh,后者将提示用户执行命令。
Unix/Linux文件系统组织
- Unix/Linux文件系统采用树形组织结构
- 文件类型
- 目录文件
- 非目录文件
- 常规文件
- 特殊文件
- 字符特殊文件
- 块特殊文件
- 其他类型
- 符号链接文件
- 文件路径名
- 根目录
- 当前工作目录
Unix/Linux命令
Unix/Linux 系统管理
- 用户账户
- 添加新用户
- sudo adduer username
第二章 编程背景
文本编辑器
- vim
- 命令模式
- 插入模式
- 末行模式
- gedit
- emacs
程序开发
- 创建源文件
- 用gcc把源文件转换成二进制可执行文件
- 静态与动态链接库
- 可执行文件格式
- 二进制可执行平面文件
- a.out 可执行文件
- ELF可执行文件
- a.out文件
- 文件头
- tsize、dsize、bsize、total_size
- 代码段
- 数据段
- 符号表
- 文件头
- 程序执行过程
- 读取a.out文件头,以确定所需的总内存大小。
- sh从总大小中分配一个内存区给执行映像。
- sh放弃放弃旧映像,开始执行新映像。
- 执行从crt0.o开始,调用main()。
- 程序终止
- 正常终止
- 异常终止
C语言程序与汇编代码的链接
- 用汇编代码编程
- 将C代码编译成汇编代码
- 汇编代码说明
- 用汇编语言实现函数
- 从汇编中调用C函数
链接库
- 动态链接库
- 静态链接库
makefile
- make工具是一个程序,它按照顺序读取makefile,以自动有选择的执行编译链接。
- 一个make文件由一系列目标项、依赖项和规则组成
- 一个make文件由一系列目标项、依赖项和规则组成
- 当make程序读取makefile时,通过比较依赖项列表中源文件的时间戳来确定要构建哪些目标项
GDB调试工具
- GDB调试工具是一个交互式调试工具,可以调试用C、C++和其他几种语言编写的程序。
- GDB是一个功能强大的调试工具,使用非常简单,但应该注意,所有调试工具只能提供有限的帮助,在某些情况下用处不大,所以程序开发的最佳方法是仔细设计程序的算法,然后根据算法编写程序代码。
C语言结构体
- 结构体和指针
- 类型转换
- 链表
- 树和二叉树