c/c++语言开发共享标准C库和系统调用如何协同工作?

我最近对编译器,标准库和内核的内部工作感兴趣。 当我在寻找标准C库的源代码时,我遇到了Glibc。 但它在Glibc的官方网站上所说的是: the library which defines the ''system calls'' and other basic facilities such as open, malloc, printf, exit...

所以我猜Glibc实际上并没有提供标准C库的源代码,而是提供了对这些函数的系统调用,然后内核负责处理它们,对吗?

我想更多地了解这些事情。 例如,如何在C程序中执行sinprintfstrlen函数? 如果Glibc只提供系统调用,那些函数的实际源代码在哪里? 内核如何执行它们? 哪里可以找到执行这些function的内核部分的源代码?

    C库是一个用户域库, 几乎就像任何库一样。

    系统调用是内核提供的接口。 它们与C标准无关。 它们是特定于操作系统 类UNIX操作系统之间存在一些相似之处,但这是一个不同的主题。

    在C库中实现的一些function将最终以这种或那种方式调用系统调用。 但这与其他任何图书馆都是一样的。

    我建议从OpenBSD查看C库。 Android手机也使用它。 它简单明了,记录完备。 你可以在这里找到它。

    Glibc提供库函数的代码,还提供系统调用定义。 提供的function中只有一小部分是系统调用。 其他人在库中有代码,或者在内部完成所有工作,或者通过内部调用将其委托给内核。 您可以在varous libc源中查看它们的工作方式。 Glibc,Eglibc,Newlib,Dietlibc等的来源适合您。

    虽然可以让操作系统对任何libc调用进行系统调用,但是由于很多原因而无法完成。

    您可以在此页面感受系统调用。 它已经过时了,但它提供了一个想法和一个指向内核中实现调用的文件的指针。 在典型的unix系统中,有数百个系统调用。 例如,您可以看到sys_open或sys_write。 当您查看fopen或open这样的调用时,在一天结束时,它们都会映射到sys_open。 像printf或写入映射到sys_write的东西。

    内核调解诸如访问文件之类的内容,因此需要成为一个阻塞点,但是库通过将它们包含在有用的抽象中来更容易地访问这些调用,对于给定的系统调用,它通常不止一个。 libraray本身不提供系统调用,它设置了东西,然后陷阱到实现它们的内核。 系统调用实际上是libc编程的内核的API。

    有些调用,比如strlen,根本不需要内核访问,该调用只能查看已经分配的内存。

    从用户空间探索这个的好工具是strace 。 给定一个程序,它将显示程序所做的所有系统调用。 您可以使用它来梳理libc调用如何映射到系统调用。

      以上就是c/c++开发分享标准C库和系统调用如何协同工作?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/560237.html

      (0)
      上一篇 2021年1月27日
      下一篇 2021年1月27日

      精彩推荐