其他分享
首页 > 其他分享> > 20201330马榕辰第一,二章学习笔记

20201330马榕辰第一,二章学习笔记

作者:互联网

第一章:

 

一.知识点归纳:

第一章前半部分重在介绍课程和书本的基本情况,包括Unix  /  Linux的历史,其各种发行版,我了解到了一些基本情况。

后半部分主要是 Linux的使用,Linux的启动过程,Unix/Linux文件系统组织、文件类型和常用的Unix/Linux命令,Linux系统的一些系统管理任务等相关内容。

 

二.学到了什么?(收获)

1.Linux内核映像:内核是与计算机接口的易替换软件的最低级别。它负责将所有以“用户模式”运行的应用程序连接到物理硬件,并允许称为服务器的进程使用进程间通信(IPC)彼此获取信息。

2.登录进程:各登录进程将在终端上打开三个文件流:stdin(用于输入),stdout(用于输出),stderr(用于错误输出)

3.Ubuntu Linux的特性:用户应为普通用户,不是根用户或者超级用户,运行任何特权命令,用户需输入 sudo command,会验证用户密码。

用户的路径环境变量设置不包括用户的当前目录,在当前目录下、运行程序,每次需输入./a.out。方便起见应更改路径设置。

4.Unix/Linux文件系统组织:文件类型有目录文件、非目录文件(常规文件和特殊文件(字符特殊文件与块特殊文件))、符号链接文件。

5.Ubuntu Linux系统管理:(1)用户账户:当用户使用登录名和密码登录后,登录进程将通过获取用户的gid和uid来转换成用户进程,并将目录更改为用户的homeDir,然后执行列出的initialProgram,该程序通常为命令解释程序sh。(2)sudo命令:在Ubuntu里,sudo(“超级用户执行”)允许用户以另一个用户(通常是超级用户)的身份执行命令,为确保用户能够发出sudo,只需在sudoers文件中添加一行:username ALL(ALL) ALL。

 

第二章:

一.知识点归纳:

第二章主要知识点:

1.介绍了基于GUI的文本编辑器;

2.展示了如何在命令和GUI模式下使用EMACS编辑器来编辑、编译和执行C语言程序;

3.阐述了程序开发的步骤;

4.详细阐释了函数调用惯例和运行时堆栈的使用;

5.展示了C语言程序与汇编代码的链接;

6.讨论了GUNmake工具编写makefile;

7.对如何使用GDB调试工具调试C语言程序给出回答,并防止出现调试过程中出现的常见错误;

8.复习了C语言中的结构和指针。以及数据结构中的二叉树模拟Unix/Linux文件系统树中的操作等。

 

二.学到了什么?(收获)

1.Linux中的文本编辑器:有三个文本编辑器,vim、gedit和EMACS。vim有三种不同的操作模式:命令模式、插入模式和末行模式,vim启动时处于默认的命令模式;gedit是GNOME桌面环境默认的文本编辑器;EMACS(GUN EMACS 2015)是强大的文件编辑器,可以在很多不同的平台上运行。

2.C语言程序变量:全局变量、局部变量、静态变量、自动变量和寄存器变量

3.程序开发步骤

(1)创建源文件:使用文本编辑器创建一个或多个程序源文件

(2)用gcc把源文件转换成二进制可执行文件;

(3)完成gcc三大步骤:1.将C源文件转换为汇编代码文件;2.把汇编代码转换成目标代码;3.执行链接器:将.o文件的所有代码段组合成单一代码段,再将所有数据段组合成单一数据段,最后将所有BSS段组合成单一bss段,用.o文件中的重定位信息调整组合代码段中的指针以及组合数据段、bss段中的偏移量,便于用符号表来解析各个.o文件之间的交叉引用。

4.创建二进制可执行文件的方式:静态链接和动态链接。其中动态链接的优点是:可减小每个a.out文件的大小;许多执行程序可在内存中共享相同的库函数;修改库函数不需要重新编译源文件。

5.大部分C编译器和链接器可生成多种不同格式的可执行文件:(1)二进制可执行平面文件;(2)a.out可执行文件;(a.out文件的内容包括文件头、代码段、数据段和符号表)(3)ELF可执行文件。

6.a.out文件包括文件头,代码段(该代码调用main()函数),数据段,符号表。

7.程序执行过程

(1)读取a.out文件头,确定所需的总内存大小,包括堆栈空间大小;

(2)sh从总大小中分配一个内存区给执行映像。

(3)sh放弃旧映像,开启新映像·

(4)执行从crt0.o开始,调用mian(),将argc和argv作为参数传递给miain();

8.正在执行a.out的进程终止方式有正常终止和异常终止(传递异常信号)。

9.Makefile:一个make文件由一系列目标项(创建或更新的文件,也可能是make程序要引用的指令或标签)、依赖项和规则(使用依赖项列表构建目标项所需的命令)组成。

10.C语言结构体的属性:(1)定义C语言结构体时,该结构体的每个字段都必须具有一个编译器已知的类型,但自引用的指针除外;(2)每个C语言结构体数据对象都分配了一个连续内存块;(3)一个结构体的大小可以由sizeof(struct type)确定;(4)假设“NODE x,y;”为两个相同类型的结构体;(5)C语言联合体与结构体类似。

11.C语言程序中常见的错误:(1)未初始化的指针或含有错误值的指针;(2)数组下标越界;(3)字符串指针和char数组使用不当;(4)assert宏

12.链表基本操作如遍历,插入,搜索等;

13.二叉树基本内容,操作方式;

 

三.问题与解决方式:

问题:makefile的相关内容不能理解,makefile是什么,有什么作用,怎么用;

思路:通过查资料先明白makefile到底是什么,它的目的作用到底是什么,在逐步了解它的主要内容,主要特性,操作方式等

结果:查找到资料makefile的定义:一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个shell脚本一样,也可以执行操作系统的命令。再具体去了解其余问题       https://blog.csdn.net/nb_zsy/article/details/123082082

 

 四.实践代码,截图:

简单C语言程序再Linux系统文件中编辑

 

 

 

 

 

 

 

 

标签:马榕辰,文件,二章,makefile,用户,C语言,20201330,Linux,out
来源: https://www.cnblogs.com/MRC-/p/16656423.html