glibc库与系统调用

本文解释了在Linux系统中,应用程序如何通过glibc库间接或直接调用系统调用,包括封装的POSIX接口函数如open和read,以及标准C函数如fopen和fread。特别提到了两种调用系统调用的方式:通过glibc库和直接使用syscall。
摘要由CSDN通过智能技术生成

前言:之前知道在Linux系统中,软件要通过系统调用接口才能进入内核,比如软件使用read函数要读取硬件设备数据时,要通过系统调用进入内核,调用内核的驱动程序,才能访问硬件。大体上是这样,但具体细节仍不明确。

应用程序的函数和系统调用的关系,是所有函数都需要系统调用吗?

Linux系统中自带的函数由glibc提供,glibc是GNU发布的libc库,是标准C的gnu实现,基于GPL的。glibc库提供了系统调用和所要用到的其他函数库,所有动态连接的程序都要用到它。说白了就是它提供了linux用户编程所用到的所有库函数(自己定义的除外)。但它并不直接实现系统调用,而是把标准C库和系统调用全部封装成API提供给用户,比如用户调用read函数的时候,会直接调用glibc的read函数(API),这个read函数里会封装一个同名的read系统调用。它包括linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc,linux下的gcc默认使用glibc。在linux下面可以通过“rpm -q glibc”查看有没有安装glibc以及版本号.

总结一下:应用程序用到的函数都来自glibc库函数(不考虑自定义函数),其中包括:

a、封装好的同名系统调用函数。如open、read函数,这类函数接口也叫做POSIX接口、系统调用的接口,适用于所有类unix平台。

b、标准C函数,其中某些比如fopen、fread函数,是对open、read函数的进一步封装(增添了buffer缓冲区,减少了进入内核的次数),也会触发系统调用,兼容适用于linux,window系统。而某些不操作硬件的标准C库函数则不会触发系统调用,只是用户层的程序实现。例如strcpy函数。

(注:使用系统调用的方式有两种:

  1. glibc库中封装了系统调用,通过c库间接调用
  2. 传递系统调用号,通过syscall直接调用

第2种方式存在的意义在于,当kernel提供了新的系统调用,而c库又没有更新时,可以使用syscall调用新的系统调用。)

原文链接:https://blog.csdn.net/weixin_36015213/article/details/112843302

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值