Linux C 应用编程学习笔记——(1)应用编程概念

《【正点原子】I.MX6U嵌入式Linux C应用编程指南》学习笔记

系统调用

由操作系统实现提供的所有系统调用所构成的集合即程序接口或应用编程接口(Application Programming Interface,API)。是应用程序同系统之间的接口。

——百度百科

通过系统调用,Linux 应用程序可以请求内核以自己的名义执行某些事情,如操作磁盘文件(打开、读或写)。

应用程序,系统调用和内核三者的关系可以用下面这张图表示。

图片来源:《【正点原子】I.MX6U嵌入式Linux C应用编程指南》

在这里插入图片描述

Linux 应用编程(系统编程)中,在应用程序中调用系统 API(如 open、write、read、close 等)完成应用程序的功能和逻辑。

Linux 操作系统存在两种状态:内核态和用户态,应用程序运行在用户态,但应用程序可以使用系统 API 来完成一些运行在内核态的任务。

库函数

应用程序除了使用系统调用来实现与内核的交互,还能使用库函数。

这里的库函数,指的是 C 语言库函数,我们第一次接触 C 语言时就开始和库函数打交道,比如 printf()scanf()strlen() 等等。在 Linux 系统中,库函数通常以动态库文件(.so)的形式存放在 /lib 目录下。C 库函数构建于系统调用之上,即库函数内部包含了系统调用,但不是所有的库函数都使用了系统调用(如一些字符串处理函数 strlen()memset() 等),而很多库函数都是系统调用的封装,比如 fwrite() 函数底层就是通过系统调用 write() 来完成文件写操作。

库函数和系统调用的区别:
库函数是属于应用层,而系统调用是内核提供给应用层的编程接口,属于系统内核的一部分;
⚫ 库函数运行在用户空间,调用系统调用会由用户空间(用户态)陷入到内核空间(内核态);
⚫ 库函数通常是有缓存的,而系统调用是无缓存的,所以在性能、效率上,库函数通常要优于系统调用;
⚫ 可移植性:库函数相比于系统调用具有更好的可移植性,通常对于不同的操作系统,其内核向应用层提供的系统调用往往都是不同,譬如系统调用的定义、功能、参数列表、返回值等往往都是不一样的;而对于 C 语言库函数来说,由于很多操作系统都实现了 C 语言库,C 语言库在不同的操作系统之间其接口定义几乎是一样的,所以库函数在不同操作系统之间相比于系统调用具有更好的可移植性。

——《【正点原子】I.MX6U嵌入式Linux C应用编程指南》

应用编程简单点来说就是:开发 Linux 应用程序,通过调用内核提供的系统调用或使用 C 库函数来开发具有相应功能的应用程序。

标准 C 语言函数库

在 Linux 系统下 , 使用的 C 语言库为 GNU C 语言函数库( 也叫作 glibc ,其网址为http://www.gnu.org/software/libc/),作为 Linux 下的标准 C 语言函数库。

下面是我电脑中 Ubuntu 16.04 的 GNU C 语言库函数的信息,它以动态库的形式存在于系统当中。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43772810/article/details/125570991