读书笔记1
20211215卢泽
第一章 - 引言
1.1 系统编程的作用
- 系统编程的目标是有效地利用系统资源来开发应用软件,并为学生提供扎实的专业基础。
1.2 本书目标
- 本书旨在强化学生的编程背景知识,并涵盖了以下主题:
- 动态数据结构的应用
- 进程概念和进程管理
- 并发编程
- 定时器和定时功能
- 信号、信号处理和进程间通信
- 文件系统
- TCP/IP和网络编程
1.3 Unix和Linux
-
Unix系统的多样性,如AT&T Unix、Berkeley Unix、HP Unix、IBM Unix和Sun Unix,通常与特定硬件平台相关。
-
Linux作为一个免费的开源操作系统,为学习和实践系统编程提供了良好的平台,如Debian Linux、Ubuntu Linux、Linux Mint和基于RPM的Linux等发行版。
1.4 在虚拟机上安装和运行Linux
- 学生可以通过虚拟机软件在Microsoft Windows 10中安装和运行Linux,步骤包括下载安装VirtualBox、创建虚拟机、下载Linux镜像、安装Linux以及调整屏幕分辨率等。
1.5 Unix/Linux文件系统组织
- 文件系统中包括目录文件、非目录文件(如常规文件和特殊文件,如字符特殊文件和块特殊文件)以及符号链接文件。
1.6 Unix/Linux命令
- 常见Unix/Linux命令包括ls、cd、pwd、touch、cat、cp、mv、mkdir、rmdir、rm、ln、find、grep、ssh、gzip、gunzip、tar、man、zip和unzip等。
1.7 Ubuntu Linux系统管理
- 管理用户账户和使用sudo命令来执行特权操作是Ubuntu Linux系统管理的重要部分。
第二章 - 编程背景
2.1 Linux中的文本编辑器
一些常见的Linux文本编辑器包括Vim、Gedit和Emacs,它们在不同的平台上运行,并具有不同的编辑模式和命令。
-
Vim
操作模式:命令模式、插入模式和末行模式
插入模式:i:插入文本
a:追加文本
末行模式: :w:写入文件
:q:退出vim
:wq:保存并退出
:q!:不保存更改,强制退出 -
Emacs
File菜单支持打开文件、插入文件和保存文件的操作。Edit菜单支持查找和替换操作
Options菜单支持配置Emacs操作的功能
Buffers菜单支持缓冲区选择和显示
Tools菜单支持编译源代码、执行二进制可执行文件和调试。
2.2 程序开发
- 程序开发的基本步骤包括创建源文件、定义C语言程序变量、使用gcc编译器将源文件转换为可执行文件,并了解gcc的三个主要步骤。
2.3 静态与动态链接
- 动态链接的优点包括减小可执行文件的大小、允许多个程序共享相同的库函数以及修改库函数不需要重新编译源文件。
2.4 可执行文件格式
- 可执行文件可以使用不同的格式,如二进制可执行平面文件、a.out可执行文件和ELF可执行文件。
2.5 a.out文件的内容
- a.out文件包括文件头、代码段、数据段和符号表等组成部分,其中文件头包含有关文件大小和类型的信息。
2.6 程序运行过程
- 程序的运行过程包括读取a.out文件头、分配内存、执行映像、调用main()函数等步骤。
2.7 Makefile
- Makefile是一个包含目标项、依赖项和规则的文件,用于构建程序时定义了编译和链接的命令。
2.8 GDB调试工具
- GDB是一个用于调试程序的工具,可以帮助程序员识别和修复程序中的错误。
2.9 C语言程序中的常见错误
- 常见的C语言程序错误包括未初始化的指针、数组下标越界、字符串指针和char数组的不当使用等。
2.10 数据结构
- 数据结构如结构体、链表和树在程序开发中起着重要作用。
2.11 自己的学习收获
- 自己通过完成虚拟机的安装、Linux的安装以及使用命令行工具实践了第一章中提到的Linux命令,如man、ls、cd、pwd等。这些实践帮助我更好地理解了Unix/Linux系统的基本概念和命令行工具的使用。
这些是第一章和第二章的主要概念和要点,它们将为您提供系统编程和Linux环境的基础知识,以便更深入地学习和实践。
实践截图
Ubuntu下C语言程序编写与运行
创建一个新的C语言源文件(九九乘法表)
`vim chengfabiao.c`
打开vim界面后按i进入写入模式,然后写入代码
输入:wq保存并退出(可以使用wq!强制退出)
进行编译、运行gcc -o chengfabiao.c
emacs试用
输入emacs
进入
用emacs打开刚才的九九乘法表