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