问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Linux的库函数是如何调用内核函数的

发布网友 发布时间:2022-04-22 17:49

我来回答

1个回答

热心网友 时间:2023-08-25 03:44

看系统调用,还有库函数,以前一直不明白,总是以为 系统调用跟库函数是一样的,但是今天才知道是不一样的。
库函数也就是我们通常所说的应用编程接口API,它其实就是一个函数定义,比如常见read()、write()等函数说明了如何获得一个给定的服务,但是系统调用是通过软中断向内核发出一个明确的请求,再者系统调用是在内核完成的,而用户态的函数是在函数库完成的。
系统调用发生在内核空间,因此如果在用户空间的一般应用程序中使用系统调用来进行文件操作,会有用户空间到内核空间切换的开销。事实上,即使在用户空间使用库函数来对文件进行操作,因为文件总是存在于存储介质上,因此不管是读写操作,都是对硬件(存储器)的操作,都必然会引起系统调用。也就是说,库函数对文件的操作实际上是通过系统调用来实现的。例如C库函数fwrite()就是通过write()系统调用来实现的。
这样的话,使用库函数也有系统调用的开销,为什么不直接使用系统调用呢?这是因为,读写文件通常是大量的数据(这种大量是相对于底层驱动的系统调用所实现的数据操作单位而言),这时,使用库函数就可以大大减少系统调用的次数。这一结果又缘于缓冲区技术。在用户空间和内核空间,对文件操作都使用了缓冲区,例如用fwrite写文件,都是先将内容写到用户空间缓冲区,当用户空间缓冲区满或者写操作结束时,才将用户缓冲区的内容写到内核缓冲区,同样的道理,当内核缓冲区满或写结束时才将内核缓冲区内容写到文件对应的硬件媒介。
系统调用与系统命令:系统命令相对API更高一层,每个系统命令都是一个可执行程序,比如常用的系统命令ls、hostname等,比如strace ls就会发现他们调用了诸如open(),brk(),fstat(),ioctl()等系统调用。
系统调用是用户进程进入内核的接口层,它本身并非内核函数,但他是由内核函数实现的,进入系统内核后,不同的系统调用会找到各自对应的内核函数,这写内核函数被称为系统调用的“服务例程”。也可以说系统调用是服务例程的封装例程。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
什么药止痒效果好 慕容三藏履历 职业cf电脑配置cf电脑配置要求是什么 玩3a电脑配置要求想玩3a大作需要什么配置 台式电脑哪些可以畅享3a大作想玩3a大作需要什么配置 七彩虹i7-10700台式机 性能强劲 高效静音 小黄鱼游戏台式电脑主机(i7-10700F、16GB、512GB、RTX3070)-适用... 工伤保险记什么科目 在4×4的正方形格纸中,有一个以格点为顶点的△ABC,请你找到点C,使三角... 在4×4方格中, 要求C点在格点上,且以AB为边的△ABC为直角三角形,标出所... 芦荟怎么美白? 芦荟可以美白皮肤吗?几天见效啊? linux 内核 get_user()函数什么意思 芦荟有美白效果吗? linux 内核 函数 天然芦荟用来洗脸能美白吗? 芦荟直接涂脸上能白皮肤吗? 用芦荟擦脸可以美白吗? 芦荟能美白吗?直接涂在脸上吗?几天涂一次最好? 芦荟可以美白祛斑吗? 芦荟可以使皮肤变白吗 芦荟真的能美白? 免费银行卡号码使用微信过段时间能实名认证 华夏免费版实名认真是怎么回事 微拍堂实名认证是不是免费的 csgo9月15实名认证免费玩 怎样实名?有年龄限制吗 去沟通100移动号办理实名认证,是免费的么 中国职业装交易网现在是实名认证是免费的吗? 开通支付宝实名认证是免费的吗? 关于淘宝免费开店申请实名认证的问题 怎么用芦荟美白? linux内核与内核函数之关系 家里养的芦荟可以涂在脸上,会变白么? 如何查询Linux内核函数 芦荟胶可以美白吗? linux内核函数kmap_atomic用法 芦荟胶能美白? 如何查找不同linux内核版本下的内核函数? 芦荟能美白吗 linux内核内存分配函数有哪些 芦荟可以怎么用来美白? Linux内核与内核函数与操作系统,系统调用,这几者的联系是啥? 如何在查看linux内核中的函数 如何调用Linux内核函数 linux内核中什么类型的函数会用到 linux内核: 什么叫做内联函数? Linux内核中prink函数和C中常用的printf函数的区别是什么? linux内核中memcpy和memmove函数的区别和实现 Linux内核中是怎么实现min和max函数 jimmy choo水晶鞋保值吗