(一)计算机系统分层
操作系统是管理计算机硬件资源和软件资源的一款系统软件。简称OS。
对上:软件控制(用系统函数调用进行控制)。对下:硬件控制(用驱动进行控制)。
操作系统通过各类函数(系统调用接口)去让用户去控制软件,即去使用操作系统的功能。
sheel程序(壳):用户和内核之间交流的媒介。即:我们进行最基本的电脑操作时,这些操作都在sheel中包含着。sheel不等于终端窗口,但sheel运行在终端窗口上。不同的linux发行版本上所使用到的sheel程序可能不一样。
本Linux所使用的sheel程序是bash。(bash是sheel的一个版本)
硬件包括:CPU、GPU、内存、磁盘等等(计算机真正运作的东西)。
内核管理硬件。
应用通过调用系统函数去操控内核,进一步的操控硬件。
(二)环境变量
(1)环境变量是:①bach用一个叫做环境变量的特性去存储有关工作的环境信息。②进程可以通过环境变量去访问计算机的资源。
自我理解:环境变量就是说,你在运行一个程序时,这个程序的一些最基本操作的一个环境,在这个环境下你才能去准确的操控该程序。
(2)在终端下输入env命令,可以查看环境变量的列表。
通过echo $name可以查看某个环境变量的值。
(3)环境变量的添加:
在终端窗口中输入 键=值 形式的内容,回车(这样添加的环境变量属于私有的,可以通过“export 键”的命令去使其变成全局环境变量)。
注:在添加环境变量时,等号左右两侧不要添加空格。
(4)环境变量的类别:
bach分为:①通过env命令能查到的(全局环境变量)。②通过env命令查不到的(自定义的/私有的/局部的环境变量)。
通过env命令能查到的全局环境变量可以被bach的子进程所继承。
每当打开一个终端时,就会生成一个bash,关闭时该bash被释放。当再次重新打开bash时就会生成一个新的bash。所以如果通过“键=值”的方式在终端上添加一个环境变量时,该环境变量只会短暂存在,关闭重新打开终端后,该环境变量就消失了。
如果想要每次开启新的终端,之前添加的环境变量都可用,则需要对家目录下的bashrc文件进行修改(在bashrc文件中的最后一行添加一个PATH=$PATH:XXXXX)。
(5)环境变量表:
每次程序执行时,内核会通过一个字符指针数组去帮忙维护一个环境变量表(该数组的每个元素都是指针,去记录一个字符串的地址,该数组的最后一个元素指向的是空,一般用来判断指针数组的截止)。
当进程开始执行时,则内核创造一个这样的数组,当进程运行结束后,该数组就被释放了。
该指针数组的地址(首元素地址)保存在二级指针变量environ(全局的指针变量)中。该二级指针用来保存一级指针的地址。即**environ用来保存*char的地址。
*environ的值就是程序执行时所创建的环境变量(environ是环境变量表的首地址,*environ就是环境变量表中第一个数组的值),该环境变量和bash无太大区别,即他是bash的继承,包括了bash中的全局部分。
main函数的第三个参数就是environ(环境变量表的首地址)。
(三)错误处理
(1)获取错误变量的方法一:
通过errno去获取错误原因的标号。
(2)获取错误变量的方法二:
(3)获取错误变量的方法三:
(三)静态库的使用
(1)静态库(拓展名是.a)
①构建步骤
(2)动态库(拓展名是.so)
(3)动态库的动态加载
①将动态库载入内存
延迟加载,进一步的提升了内存的利用效率
Filename——想要调用的库的路径
Flag——加载库的方式
②从以获取的动态库中找到所要用的函数
Handle——动态库访问句柄
Symbol——要使用的动态库中的函数
返回的是handle库中的symbol函数的地址(要用函数指针去接这个地址)
③卸载已使用完的函数的内存:
④检查是否出问题,返回错误的原因