第一、二章读书笔记
第一章 引言
1.系统编程的作用
- 使学生有效利用系统资源开发应用软件
- 为学生打下专业基础
2.本书目标
- 强化学生的编程背景知识
- 了解动态数据结构的应用
- 领会进程概念和进程管理
- 学会并发编程
- 学会使用定时器和定时功能
- 了解信号、信号处理和进程间通信
- 学会文件系统相关操作
- 了解TCP/IP和网络编程
3.关于UNIX
- Unix是一种通用操作系统,许多公司都开发过Unix操作系统,大多数Unix操作系统都是专有的,并且与特定的硬件平台相关联。
4.关于LINUX
- Linux是一个类Unix系统,包含Unix系统的很多特性,可免费使用,易于安装。
- 利用VirtualBox或VMware可在Windows主机中安装和运行Linux
5.使用LINUX
- Linux启动程序:GRUB和LILO,或HD启动程序(Wang 2015)
- Linux以单用户模式启动
- 登录进程:三个文件流stdin(用于输入)、stdout(用于输出)、stderr(用于错误输出),之后等待用户登录
-命令执行:cd(更改目录)、exit(退出)、logout(注销)等
6.使用Ubuntu LINUX
- 使用Cutrl+ALT+T可打开终端
- 要运行任何特权命令,用户必须输入sudo command
- 在当前目录下运行程序每次必需输入./a.out,方便起见在用户的主目录中创建一个包含 PATH=$PATH:./ 的.bashrc文件
- 在64位Linux下,使用 gcc -m32 t.c # compile t.c into 32-bit code 生成32位代码。
- Unix/Linux文件系统采用树形组织结构
- 文件类型:
-
目录文件:一个目录可能包含其他的目录和(非目录)文件。
-
非目录文件:
- 常规文件:包含普通文本或包含可执行的二进制代码。
- 特殊文件:特殊文件时/dev目录中的条目。
-
符号链接文件:属于常规文件,其内容为其他文件的路径名。
- Linux命令:
- ls:ls dirname:列出CWD或目录的内容
- cd dirname:更改目录
- pwd:打印CWD的绝对路径名
- touch filename:更改文件名时间戳(如果文件不存在,则创建文件)
- cat filename:显示文件内容
- cp src dest:复制文件
- mv src dest:移动或重命名文件。
- mkdir dirname:创建目录
- rmdir dirname:移除(空)目录
- rm filename:移除或删除文件
- ln oldfile newfile:在文件之间创建链接
- find:搜索文件
- grep:搜索文件中包含模式的行
- ssh:登录到远程主机
- gzip filename:将文件压缩为.gz文件。
- gunzip file.gz:解压.gz文件
- tar -zcvf file.tgz .:从当前目录创建压缩tar文件
...
- Linux手册页:
- 利用 sudo adduer username 添加新用户
第二章 编程背景
1.Linux中的文本编辑器
-
vim
- 移动光标的命令键:h 左移一个字符 l:右移一个字符
j:下移一个字符 k:上移一个字符 - 插入模式:i:插入文本 a:追加文本 esc:退出
- :w:写入(保存)文件。
- :q:退出vim。
- :wq:保存并退出。
- 移动光标的命令键:h 左移一个字符 l:右移一个字符
-
VIAIWYG编辑器
- Ctrl+c:中止或退出
- Ctrl+k:删除行到缓冲区
- Ctrl+Y:从缓冲区内容中复制或粘贴
- Ctrl+S:保存已编辑文本
-
getdit
-
emacs
...
2.程序开发
- 程序开发步骤
- 创建源文件
- 用gcc把源文件转换成二进制可执行文件
- 链接
- 静态与动态链接
- 创建二进制可执行文件的方式有两种:静态链接和动态链接分别使用静态库和共享库。动态链接所用的库称为动态链接库(DLL),在Linux中称为共享库(.so文件)
- 可执行文件格式
- 二进制可执行平面文件
- a.out可执行文件
- ELF可执行文件
- a.out文件内容:文件头,代码段,数据段,符号表。
- 程序执行过程
- 读取a.out文件头,以确定所需的总内存大小,包含栈空间大小
- sh从总大小中分配一个内存区给执行映像
- sh放弃旧映像,开始执行新映像
- 执行从crt0.o开始,调用main()
- 程序终止
3.C语言中的函数调用
- PC(IP):指向CPU要执行的下一条指令
- SP(SP):指向栈顶
- FP(BP):指向当前激活函数的栈帧
-long jump:返回到调用序列中较早的某个函数
4.C语言中与汇编代码的链接
- 将c语言编译成汇编代码
- 用汇编语言实现函数
- 从汇编中调用C语言
5.链接库
在Linux中,有两种链接库:用于静态链接库和动态链接库。
- 静态链接库的创建
- 动态链接库的创建
6.makefile
- make程序按照顺序读取makefile,它通过比较依赖项列表中源文件的时间戳来确定要构建哪些目标项。Makefile支持变量和后缀规则。
7.GDB调试工具
- 使用步骤:
- 创建makefile:
t: t.c
gcc -g -o t t.c
使用RMACS编辑c语言源文件。 - 编译源代码:打开菜单,选择编译或
gccc -g -o t t.c - 启动GDB
- 多窗口GDB:菜单中选择Gud-GDB-MI-Display Other Windows
- 创建makefile:
8.C语言结构体、指针和链表操作
- 定义c语言结构体时,每一个字段都必须具有一个编译器已知的类型
- Unix文件系统的逻辑结构体是一个普通树,Linux文件系统也相同
9.Linux中的树
- mkdir 路径名:为给定的路径名创建一个新目录
- rmdir 路径名:如果目录为空,则删除该目录
- pwd:打印当前工作目录的(绝对)路径名
- creat 路径名:创建一个FILE结点
- rm 路径名:删除FILE结点
- save 文件名:将当前文件系统树保存为文件
- reload 文件名:从一个文件构造一个文件系统树
- menu:显示有效命令菜单
- quit:保存文件系统树,然后终止程序
...
总结体会
一二章的内容大多都是一些介绍Linux虚拟机的安装和基础用法,以及与之前所学过的c语言相关知识的对接,在阅读前两章的内容后,我对于Linux系统也有了一些初步的认识,并且在虚拟机上进行了一些尝试,感觉收获了很多知识。