企业网站建设方案书,凡客是什么意思,WordPress自定义ID插件,大鱼号自媒体平台前言 #x1f3ac; 个人主页#xff1a;ChenPi #x1f43b;推荐专栏1: 《C_ChenPi的博客-CSDN博客》✨✨✨ #x1f525; 推荐专栏2: 《Linux C应用编程#xff08;概念类#xff09;_ChenPi的博客-CSDN博客》✨✨✨ #x1f6f8;推荐专栏3: 《 链表_Chen…前言 个人主页ChenPi 推荐专栏1: 《C_ChenPi的博客-CSDN博客》✨✨✨ 推荐专栏2: 《Linux C应用编程概念类_ChenPi的博客-CSDN博客》✨✨✨ 推荐专栏3: 《 链表_ChenPi的博客-CSDN博客 》 ✨✨✨ 本篇简介 : 在上一章中我学习了Linux系统目录结构这章我们来认识一下什么是系统调用和库函数 在第一章的时候我们说过我们应用开发是在应用层的但是应用层是不能直接控制内核的所以我们要经过系统调用或者库函数来操作内核如果对这些概念不是很了解可以看看我前面两章 说了这么多那什么是系统调用呢
一 何为系统调用 系统调用system call其实是 Linux 内核提供给应用层的应用编程接口API
是 Linux 应用层进入内核的入口。
不止 Linux 系统所有的操作系统都会向应用层提供系统调用
应用程序通过系统调用来使用 操作系统提供的各种服务。
通过系统调用Linux 应用程序可以请求内核以自己的名义执行某些事情 譬如打开磁盘中的文件、读 写文件、关闭文件以及控制其它硬件外设。 系统调用是内核直接向应用层提供的应用编程接口譬如 open、write、read、close 等
通过系统调用 API应用层可以实现与内核的交互其关系可通过下图简单描述 二 何为库函数 1.概念
库函数也就是 C 语言库函数C 语言库是应用层使用的一套函数库在 Linux 下通常以动态.so 库文件的形式提供存放在根文件系统/lib 目录下
2.库函数部分函数是由系统调用封装
C 语言库函数构建于系统调用之上
也就是说库函数其 实是由系统调用封装而来的
当然也不能完全这么说原因在于有些库函数并不调用任何系统调用譬如一 些字符串处理函数 strlen()、strcat()、memcpy()、memset()、strchr()等等
而有些库函数则会使用系统调用来
帮它完成实际的操作譬如 库函数 fopen 内部调用了系统调用 open()来帮它打开文件、库函数 fread()就利用 了系统调用 read()来完成读文件操作、fwrite()就利用了系统调用 write()来完成写文件操作。 3.为啥要使用库函数 Linux 系统内核提供了一系列的系统调用供应用层使用
我们直接使用系统调用就可以了呀那为何还 要设计出库函数呢
事实上有些系统调用使用起来并不是很方便于是就出现了 C 语言库
这些 C 语言 库函数的设计是为了提供给底层系统调用 更为方便且更具有可移植性的调用接口。更为好用 库函数和系统调用的区别 库函数是属于应用层而系统调用是内核提供给应用层的编程接口属于系统内核的一部分库函数运行在用户空间调用系统调用会由用户空间用户态陷入到内核空间内核态库函数通常是有缓存的而系统调用是无缓存的所以在性能、效率上库函数通常要优于系统调 用可移植性库函数相比于系统调用具有更好的可移植性 通常对于不同的操作系统其内核向应用 层提供的系统调用往往都是不同 譬如系统调用的定义、功能、参数列表、返回值等往往都是不一 样的而对于 C 语言库函数来说由于很多操作系统都实现了 C 语言库C 语言库在不同的操作系统上可以用同一套API 所以库函数在不同操作系统之间相比于系统调用具有更好的 可移植性。
所以应用编程简单点来说就是
开发 Linux 应用程序通过调用内核提供的系统调用或使用 C 库函数 来开发具有相应功能的应用程序。
三 应用程序的 main()函数 对学习过 C 语言编程的读者来说譬如单片机编程、Windows 应用编程等main 函数想必大家再熟悉 不过了很多编程开发都是以 main 函数作为程序的入口函数同样在 Linux 应用程序中main 函数也是作 为应用程序的入口函数存在main 函数的形参一般会有两种写法如果执行应用程序无需传参则可以写 成如下形式
示例代码 1.4.1 main 函数写法之无传参
int main(void){ /* 代码 */}
如果在执行应用程序的时候需要向应用程序传递参数则写法如下
示例代码 1.4.2 main 函数写法之有传参
int main(int argc, char **argv){ /* 代码 */}
argc 形参表示传入参数的个数包括应用程序自身路径和程序名譬如运行当前目录下的 hello 可执行 文件并且传入参数如下所示 ./hello 112233
那么此时参数个数为 2并且这些参数都是作为字符串的形式传递给 main 函数: argv[0]等于./hello argv[1]等于112233
好了这章我们就讲到这里下一章我们来聊聊系统调用最常见的文件操作
openreadwriteclose
对您有帮助的话记得点赞加关注 如果有说的不对的欢迎指正