第一、二章学习笔记

一、知识点总结
第一章
Unix和Linux是两个相关但不完全相同的概念。下面是它们的概论知识点总结:
Unix:
Unix是一种操作系统家族,设计目标是提供一个可移植、多用户、多任务的操作系统。
Unix采用了分层架构,将操作系统划分为内核等组件。
Unix引入了许多重要的概念和工具,如文件描述符、进程控制、管道、Shell脚本等。
Unix主要运行在大型服务器和工作站上,并在科学、学术和企业领域广泛使用。

Linux:
Linux是一个基于Unix思想和设计理念的开源操作系统内核
Linux内核提供了操作系统的核心功能,如进程管理、内存管理、设备驱动等。
Linux操作系统通常是通过发行版的形式发布,如我使用的Ubuntu。
Linux发行版包含了Linux内核以及大量的开源软件和工具,使得它们能够成为完整的操作系统。
Linux具有良好的可定制性和灵活性,广泛应用于服务器、嵌入式系统、个人计算机等领域。

Unix和Linux的关系:
Linux内核受到Unix设计的启发,并且与Unix具有一些相似性。
Linux采用了Unix的许多概念和工具,如Shell、文件系统、管道等。
Linux兼容大部分Unix软件,并且可以运行在多种硬件平台上。

尽管Unix和Linux之间存在相似性和联系,但它们是不同的实体,各自拥有自己的版本、发行版和社区支持。
总结起来,Unix是一个操作系统家族,而Linux是一个基于Unix思想和设计理念的开源操作系统内核。

第二章
Linux中的基础编程内容涵盖了多个方面,以下是一些核心概念和技术的总结:

在 Linux 上进行基本的文件和目录操作,如创建、删除、复制和移动文件。
使用命令行工具来管理用户、权限和组。
控制进程和作业,包括启动、停止和监视进程。

文本处理:
使用命令行工具如 grep、sed 和 awk 对文本数据进行搜索、替换、过滤和格式化。

编译和构建:
使用编译器,比如我使用的gcc,将源代码编译成可执行文件。
使用构建系统自动化编译和构建过程。

编程语言支持:
Linux 上支持多种编程语言,如C语言,Python等。
学习和使用特定的编程语言来开发应用程序和脚本,在本次学习中我用了我最擅长的c语言进行处理。

文件系统操作:
使用命令行工具操作文件和目录,如查看文件信息、更改权限、修改文件内容等。
处理文件路径、遍历目录结构,并进行文件搜索和过滤。

软件包管理:
使用软件包管理器(apt)安装、更新和卸载软件包。
学习软件包依赖关系管理和包管理工具的使用。
例如这次的学习中我需要安装gcc和makefile

Emacs 编程:
Emacs 是一款强大的可扩展文本编辑器,也可用于编程。 提供了各种编程模式和插件,适用于多种编程语言
Emacs 的特点包括代码自动完成、代码导航、代码调试等功能。

Makefile:
Makefile 是一个用于构建和管理软件项目的脚本文件。
Makefile 使用一系列规则来指定源文件的依赖关系和构建命令。
Make 工具根据 Makefile 的规则自动判断文件更新并执行相应的构建操作。
Makefile 允许开发人员简化编译、链接和安装过程,并支持跨平台使用。
在使用Emacs进行编程时,你可以按照以下方式来提高效率:

苏格拉底挑战



二、问题与解决思路
1、因为我的虚拟机在旧电脑上,因此我进行了重新安装

最后通过官网下载的VM和ubuntu很快完成了安装

2、打开文件时遇到了错误



经过改正,发现是我代码输入错误

三、程序实践,代码链接
1、安装虚拟机并注册


2、学习使用emacs

下载需要用到的gcc和makefile

3、用gcc把源文件转换成二进制可执行文件

四、其他知识点

1、动态链接和静态链接
动态链接:可以减小每个a.out文件大小,许多执行程序可以在内存中共享相同库函数
动态链接库
gcc -c -fPIC mysum.c
gcc -shared -o libmylib.so my sum.o
gcc t.c -L -lmylib
export LD_LIBRARY_PATH=./
a.out

静态链接库
gcc -c mysum.c
ar rcs libmylib.a mysum.o
gcc -static t.c -L. -lmylib
a.out

2、a.out可执行文件
ELF可执行文件
读取a.out文件头
Total_Size = _brk + stackSize

3、程序执行过程
在类Unix操作系统中,在sh命令行a.out one two three执行a.out文件,以标记字符串作为命令行参数。为执行命令,sh创建一个子进程并等待改子进程终止。子进程运行时,sh使用a.out文件执行新的执行映像

4、程序终止

正常终止
程序执行成功,main()最终会返回到crt0.out,调用库函数exit(0)(系统调用)来终止进程

异常终止
遇到错误,如无效地址,非法指令,越权等,按下ctrl+C可以产生硬件中断,用命令kill -s signal_number pid #signal_number=1 to 31向通过pid识别的目标进程发送信号。
C语言中的函数调用

posted @ 2023-09-10 18:53  20211309宁心宇  阅读(21)  评论(0编辑  收藏  举报