首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux的系统调用与函数库的关系

系统调用是应用程序与内核之间联系的一条纽带,扮演着使者的身份。当应用程序需要内核帮它做点事情的时候,就可以通过系统调用把应用程序的要求传递给内核。系统调用隔离了用户空间和内核空间,使应用程序无法任意访问内核,保证了Linux操作系统的稳定可靠。

系统调用的另外一个好处就是屏蔽的内核底层的实现方法,用户空间的应用程序无需知道自己用的是什么架构的处理器,使用怎样的存储芯片等,便可以用统一的接口实现想要的功能。

但程序员在编程的时候似乎也很少接触系统调用,一般不直接使用系统调用的接口去编程,而是使用的标准的API进行编程,而这些标准的API都来自于某一个函数库,比如C库。C库提供了C语言各种标准函数的接口。程序员知道直接调用就可以,并不关心C库底层是如何实现的。

其实C库的实现跟系统调用息息相关。C库通过一个或多个系统调用加上一些格式,功能的调整,然后组合成了一个C函数供程序员使用。比如printf()就使用了write()这个系统调用,printf()也加上了一些格式化的东西,比如用%d表示整型数。

所以一般函数库是对系统调用的封装,为程序员提供统一的API,程序员仅使用这些API即可完成编程。哪怕在别的操作系统,程序员也可能使用相同的API进行编程。比如标准C函数,在windows系统上可以使用,在Linux上面也可以使用。但windows上面的标准C库和Linux上面的标准C库是不同的,因为两个系统的系统调用差别是很大的,需要使用不同的C库。这就是为什么不同操作系统的函数库不能通用的原因。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180807A0GPMG00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券