目录
入门级问题
为什么要学习Linux系统?
为什么Linux系统被嵌入式设备广泛应用?
系统调用
应用层是什么?
系统调用和库函数有什么区别?
为什么在应用层不能直接调用内核中的函数?
为什么有了系统调用就安全了?
什么是API应用编程接口?
目前为止我们已经学习了linux系统的终端上的一些操作命令、vim编辑器上的一些操作命令、C语言和数据结构,还做一个“停车管理系统”的项目。
从今天开始学习Linux系统编程!
入门级问题
为什么要学习Linux系统?
因为在嵌入式设备中用的大多都是Linux系统,而且在现实生活中Linux系统应用的概率可能比windows系统要大,比如安卓系统底层用的就是Linux系统,很多智能家居用的也都是Linux系统,一些路由器也是Linux系统,电视机底层用的也是Linux系统等等,凡是能被手机远程控制的产品,它们的底层一般都是Linux系统。
为什么Linux系统被嵌入式设备广泛应用?
因为Linux系统开源免费,而且功能强大。
说明:本专栏是嵌入式学习栏目,因此数据结构这部分的学习环境我们最好还是在虚拟机(或者一些云服务器)上的Linux终端学习,一切为了方便适应以后的工作环境!
现在开始进入正题......
系统调用
操作系统一般是由两个部分组成:一个操作系统的内核(内核空间),还有一个是应用层(用户空间);
内核(操作系统的核心)又可以分为好几个部分,驱动(操作底层硬件)只是其中一部分。内核有五大功能:内存管理、网络管理、文件管理、系统管理、进程调度。这些核心功能是应用层不能使用的。
应用层是什么?
应用层也可以分为好几个部分,其中最上层就是我们之前经常敲的一些命令:cd, cp, ls等等,这些命令都属于应用层。
比如ls这个命令实现的是显示当前文件夹下的一个文件,那它是怎么实现的呢?
它其实也通过代码实现的,即调用了某些函数来完成这样的一个功能,而这个函数我们就这个把它称为系统调用,因此这个系统调用通俗来讲就是函数。但是这个函数跟我们C语言中的库函数不一样。
目前我们接触了两种函数,一种是库函数(比如printf, strcp),一种是系统调用(open, socket, fork)。
系统调用和库函数有什么区别?
系统调用函数只属于Linux操作系统,只能在Linux操作系统中使用,而库函数,无论是Windows还是Linux或者其他操作系统,只要系统中移植了C库就一定可以使用,所以C语言是跨平台的。
在应用层如果我们想要打印数据我们使用的是printf这个函数,在内核中如果想要打印数据的话也有相应的函数。应用层有一套函数,在内核中也有一套自己的函数。
为什么在应用层不能直接调用内核中的函数?
主要是为了安全起见,因为用户操作有误,系统就“死掉”了。因此,为了安全起见,应用层和内核之间隔了一层系统调用。
为什么有了系统调用就安全了?
因为系统调用中做了一些判断,如果发现所传参数是合法的,就让用户调用内核中的函数。
系统调用衔接了应用层和内核,像ls cd cp这些命令是系统调用之上的,也就是说ls这个命令是通过系统调用来实现的。
什么是API应用编程接口?
API(application program interface)其实也是系统调用这些函数,两个概念差别不大,有时候说系统调用,有时候可以说API。
系统调用并不是直接与程序员进行交互的,它仅仅是一个通过软中断机制向内核提交请求,以获取内核服务的接口。在实际使用中程序员调用的通常是用户编程接口—API。
系统命令相对API更高了一层,它实际上是一个可执行程序,它的内部引用了用户编程接口(API)来实现相应的功能。
下节开始学习Linux文件编程!
本篇就到这里,下篇继续!欢迎点击下方订阅本专栏↓↓↓