学习笔记

第一章知识点:系统编程的作用、Unix的历史简述(包括贝尔实验室开发的Unix早期版本、AT&T System V以及Unix的其他版本,如BSD、HP UX、IBM AIX和Sun/Solaris Unix等)、Linux的开发及其各种发行版(包括Debian、Ubuntu、 Mint、RedHat和Slackware)、用于Linux的各种硬件平台和虚拟机以及安装虚拟机至Windows系统的方法、Linux的启动过程(从Linux内核启动到用户登录和命令执行)以及最后一些常用口令。
最有收获的内容:1.首先是一段关于1.3本书的目标的个人理解,大一大二两年,我们通过必修课程,粗浅学习了Python、C以及Java三种语言,但是我个人感觉学习完我并没有将这些语言的共同处联系在一起,加强理解,反而是学了这一门忘了上一门,这本书学习的意义就是将过去零碎的知识点通过简单的实际应用例子让我们形成一个完整的只是体系,我想这也是老师为什么一上课就举了一个井字格记忆体系的原因之一吧。2.第二点感觉感悟比较深的就是1.15里面的常用口令,还记得在大一的时候老师亲自示范了只是用键盘操控电脑,强调了键盘控制的重要性,但是当时没有在意。其实在之前的学习过程中,书的附录里面也有一些键盘常用口令的使用方法,但是都没有重视,如今再次遇见这种快捷的方式应当大胆尝试、去学习并应用在实践中。
常用口令总结:Is: Is dirname:列出CWD或目录的内容。
cd dirname:更改目录。
pwd:打印CWD的绝对路径名。
touch filename:更改文件名时间戳(如果文件不存在,则创建文件)
cat filename:显示文件内容。
cp src dest:复制文件。
mv src dest:移动或重命名文件。
mkdir dirname:创建目录。
rmdir dirname:移除(空)目录。
rm filename:移除或删除文件。
In olefile newfile:在文件之间创建链接。
find:搜索文件。
grep:搜索文件中包含模式的行。
ssh:登录到远程主机。
gzip filename:将文件压缩为.gz文件。
gunzip filename.gz:解压.gz文件。
tar -zcvf file.tgz .:从当前目录创建压缩tar文件。
tar -zxvf file.tgz .:从.tgz文件中解压文件。
man:显示在线手册页。
zip file.zip filenames:将文件压缩为.zip文件。
unzip file.zip:解压.zip文件。
问题:VBox虚拟机安装之后无法正常打开Linux系统下的虚拟机。


问题名称:Error relaunching VirtualBox VM process:5
后解决上述问题后出现新问题:控制台显示资源保护找到了损坏文件但无法修复问题,上网搜查方案强制更新重新打开VBox仍然无法打开,决定更换软件。
解决思路:上网查阅资料,无法解决,重新使用VM虚拟机进行换源后下载成功。
解决方法链接:https://blog.csdn.net/DBFNO/article/details/6659568
https://www.cnblogs.com/karmapeng/p/10241731.html
https://blog.csdn.net/csdn_hmt/article/details/99685466
https://www.cnblogs.com/karmapeng/p/10241731.html


第二章知识点:介绍了几种基于GUI的文本编辑器,比如vim、gedit和EMACS;展示了如何在命令和GUI模式下使用EMACS编辑器来编辑、编译和执行C语言程序;阐述了GCC、静态和动态链接、二进制可执行文件的格式和内容、程序执行和终止等;函数调用惯例和运行时堆栈的使用;C语言程序与汇编代码的链接;讨论了GNU make工具,并举例说明如何编写makefile;GDB调试工具调试C语言程序;C语言中的结构和指针;二叉树和树的遍历算法。本章以一个编程项目为例,向读者展示了如何用二叉树模拟Unix/Linux文件系统树中的操作。该项目从单根目录节点开始。它支持mkdir、rmdir、creat、rm、cd、pwd、Is操作,将文件系统树保存为文件,并从保存的文件中恢复文件系统树。在该项目中,读者可应用标记化字符串、解析用户指令及使用函数指针来调用指令处理函数等编程技巧。
部分Unix/Linux文件系统操作命令规范:
mkdir路径名:为给定的路径名创建一个新目录。
rmdir路径名:如果目录为空,则删除该目录。
cd[路径名]:将当前工作目录更改为路径名,如果没有路径名则更改为“/”。
ls[路径名]:列出路径名或当前工作目录的目录内容。
pwd:打印当前工作目录的(绝对)路径名。
creat路径名:创建一个FILE节点。
rm路径名:删除FILE节点。
save文件名:将当前文件系统树保存为文件。
reload文件名:从一个文件构造一个文件系统树。
menu:显示有效命令菜单。
quit:保存文件系统树,然后终止程序。
课堂笔记:


gdb断点设置指令总结:

(gdb)break 7 //以行号设置断点
(gdb)break function_name //以函数名设置断点
(gdb)clear 行号 //删除这行的断点
(gdb)clear 函数名 //删除该函数的断点
(gdb)delete breakpoints n //删除第n次(指定编号)设置的断点
(gdb)clear //删除程序中所有的基于行设置的断点
(gdb)delete //删除程序中所有的断点
(gdb)r //执行程序
(gdb)n //单步调试
(gdb)c //执行到下一个断点
(gdb)print 变量或表达式 //打印变量或表达式当前的值。
(gdb)print 变量=值 //对变量进行赋值
(gdb)whatis 变量或表达式 //显示变量类型
(gdb)set variable 变量=值 //变量赋值
最有收获的知识点:书上P39页的静态链接库与动态链接库。书上给出了详细的创建办法以及更改方法与区别,在上网查找资料后详细总结一下静态库:函数和数据被编译进一个二进制文件(通常扩展名为.lib)。在使用静态库的情况下,在编译链接可执行文件时,链接器从库中赋值这些函数和数据并把他们和应用程序的其他模块组合起来创建最终的可执行文件.EXE,使用时,包含头文件和库文件就可以了。
动态库:是一种不可执行的二进制程序文件,它允许程序共享执行特殊任务所必需的代码和其他资源。Windows平台上动态链接库的后缀名是”.dll”,Linux平台上的后缀名是“.so”。Linux上动态库一般是libxxx.so;相对于静态函数库,动态函数库在编译的时候并没有被编译进目标代码中,你的程序执行到相关函数时才调用该函数库里的相应函数,因此动态函数库所产生的可执行文件比较小。由于函数库没有被整合进你的程序,而是程序运行时动态的申请并调用,所以程序的运行环境中必须提供相应的库。动态函数库的改变并不影响你的程序,所以动态函数库的升级比较方便。
需要注意的是注意静态库.lib 和动态库的引入库.lib文件是由区别的。在动态链接库中可以使用别的动态链接库,但是静态库不能使用别的静态库或动态库的函数。

posted @ 2021-09-13 22:39  唐子越  阅读(96)  评论(0编辑  收藏  举报